天天看點

http請求xml的封包接口

 我們在進行接口對接時,會出現封包形式的資訊傳遞,那麼下文則介紹如何處理封包形式的xml檔案。

http(https)- post -xml

public static String sendHttps(String xmlInfo) {
        //String a="";//請求參數
        String result = "";
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            trustAllHosts();
            URL realUrl = new URL("https://apitest.bwjf.cn/openNozzle");

            //如果是https就是下面兩行代碼
            HttpsURLConnection conn = (HttpsURLConnection) realUrl.openConnection();
            conn.setHostnameVerifier(DO_NOT_VERIFY);
            //如果是http則是下面一行代碼
            HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
            // 設定通用的請求屬性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Content-Type", "text/plain;charset=utf-8");
            // 發送POST請求必須設定如下兩行
            conn.setDoOutput(true);
            conn.setDoInput(true);
           
            // 擷取URLConnection對象對應的輸出流
            out = new PrintWriter(conn.getOutputStream());
            //加密
            String base64keyString = encoder(xmlInfo);
            // 發送請求參數
            out.print(base64keyString);
            System.out.println("發送封包:"+xmlInfo);
            System.out.println("加密封包:"+base64keyString);
            // flush輸出流的緩沖
            out.flush();
           // System.out.println("響應封包:"+conn.getInputStream());
            // 定義BufferedReader輸入流來讀取URL的響應
            in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
           
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
            System.out.println("響應封包:"+result);
            String key = decoder(result);
            System.out.println("響應解密封包:"+key);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {// 使用finally塊來關閉輸出流、輸入流
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return result;
    }
           

而傳遞封包需要對其進行base64加密解密處理,這個需要導入jar包。

/**
	    *  加密
	 */
    public static String encoder(String xmlInfo) {
    	byte[] bytes=xmlInfo.getBytes();
        String base64keyString =new BASE64Encoder().encodeBuffer(bytes);
        return base64keyString;
    }
    /**
	    *  解密
	 */
    public static String decoder(String xmlInfo) throws IOException {
    	byte[] bt = (new BASE64Decoder()).decodeBuffer(xmlInfo); 
    	String key=new String(bt); 
        return key;
    }
           

傳遞的xml資訊封裝處理,根據接口方提供的封包格式。

StringBuilder sb = new StringBuilder();
		sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
		sb.append("	   <business id=\"CXSBZT\" >");
		sb.append("    <body>");
		sb.append("    <input>");
		sb.append("        <jsbh>" +jsbh + "</jsbh>");
		sb.append("    </input>");
		sb.append("    </body>");
		sb.append("</business>");
		return sb.toString();