我們在進行接口對接時,會出現封包形式的資訊傳遞,那麼下文則介紹如何處理封包形式的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();