关于Http Post Xml

简介:

关于Http Post Xml

 

 

一、概述

在不同的应用之间传递数据,可以通过web service的方法,同时还可以通过Http Post Xml的方法,相比而言,通过web service传递数据灵活,但是配置起来较为麻烦,涉及到新知识的学习,而通过Http Post Xml传递数据,不需要涉及新的知识,但是灵活性稍差,需要客户端和服务端事先约定好xml数据的结构。

Http Post Xml方式传递数据在跟移动、联通等电信运营商之间合作时,经常会用到,一般涉及到下面的知识点:

Ø         Java网络编程(java.net包)

Ø         Java IO编程(java.io包)

Ø         文档对象模型(DOM)

Ø         Java解析xml(javax.xml.parsers包)

二、客户端代码

通过Http Post Xml传递数据,客户端一般是通过URL建立到服务端的连接,向服务端发送xml数据,然后获取服务端的响应并进行解析:

Java代码 复制代码
  1. String xmlString = "<?xml version='1.0' encoding='gb2312'?>"  
  2.                      + "<Req>"  
  3.                      + "<EventContentReq>"  
  4.                      + "<EventID>101</EventID >"  
  5.                      + "</EventContentReq>"  
  6.                      + "</Req>";   
  7.   
  8. byte[] xmlData = xmlString.getBytes();   
  9.   
  10. String urlStr = "http://124.128.62.164:7001/FetchTaskDataServlet";   
  11.   
  12. DataInputStream input = null;   
  13.   
  14. java.io.ByteArrayOutputStream out = null;   
  15.   
  16. try{   
  17.   
  18.        //获得到位置服务的链接   
  19.   
  20.        URL url = new URL(urlStr);   
  21.   
  22.        URLConnection urlCon = url.openConnection();   
  23.   
  24.        urlCon.setDoOutput(true);   
  25.   
  26.        urlCon.setDoInput(true);   
  27.   
  28.        urlCon.setUseCaches(false);   
  29.   
  30.        //将xml数据发送到位置服务   
  31.   
  32.        urlCon.setRequestProperty("Content-Type""text/xml");   
  33.   
  34.        urlCon.setRequestProperty("Content-length",String.valueOf(xmlData.length));   
  35.   
  36.        DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream());   
  37.   
  38.        printout.write(xmlData);   
  39.   
  40.        printout.flush();   
  41.   
  42.        printout.close();   
  43.   
  44.        input = new DataInputStream(urlCon.getInputStream());   
  45.   
  46.        byte[] rResult;   
  47.   
  48.        out = new java.io.ByteArrayOutputStream();   
  49.   
  50.        byte[] bufferByte = new byte[256];   
  51.   
  52.        int l = -1;   
  53.   
  54.        int downloadSize = 0;   
  55.   
  56.        while ((l = input.read(bufferByte)) > -1) {   
  57.   
  58.            downloadSize += l;   
  59.   
  60.            out.write(bufferByte, 0, l);   
  61.   
  62.            out.flush();   
  63.   
  64.        }   
  65.   
  66.        rResult = out.toByteArray();   
  67.   
  68.        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();   
  69.   
  70.        DocumentBuilder db = dbf.newDocumentBuilder();   
  71.   
  72.        Document d = db.parse(new ByteArrayInputStream(rResult));   
  73.   
  74.        String TaskAddr = d.getElementsByTagName_r("TaskAddr").item(0).getFirstChild().getNodeValue();   
  75.   
  76.        System.out.println("TaskAddr:"+TaskAddr);   
  77.   
  78. }   
  79.   
  80. catch(Exception e){   
  81.   
  82.        e.printStackTrace();   
  83.   
  84. }   
  85.   
  86. finally {   
  87.   
  88.        try {   
  89.   
  90.               out.close();   
  91.   
  92.               input.close();   
  93.   
  94.        }   
  95.   
  96.        catch (Exception ex) {   
  97.   
  98.        }   
  99.   
  100. }  
String xmlString = "<?xml version='1.0' encoding='gb2312'?>" + "<Req>" + "<EventContentReq>" + "<EventID>101</EventID >" + "</EventContentReq>" + "</Req>"; byte[] xmlData = xmlString.getBytes(); String urlStr = "http://124.128.62.164:7001/FetchTaskDataServlet"; DataInputStream input = null; java.io.ByteArrayOutputStream out = null; try{ //获得到位置服务的链接 URL url = new URL(urlStr); URLConnection urlCon = url.openConnection(); urlCon.setDoOutput(true); urlCon.setDoInput(true); urlCon.setUseCaches(false); //将xml数据发送到位置服务 urlCon.setRequestProperty("Content-Type", "text/xml"); urlCon.setRequestProperty("Content-length",String.valueOf(xmlData.length)); DataOutputStream printout = new DataOutputStream(urlCon.getOutputStream()); printout.write(xmlData); printout.flush(); printout.close(); input = new DataInputStream(urlCon.getInputStream()); byte[] rResult; out = new java.io.ByteArrayOutputStream(); byte[] bufferByte = new byte[256]; int l = -1; int downloadSize = 0; while ((l = input.read(bufferByte)) > -1) { downloadSize += l; out.write(bufferByte, 0, l); out.flush(); } rResult = out.toByteArray(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document d = db.parse(new ByteArrayInputStream(rResult)); String TaskAddr = d.getElementsByTagName_r("TaskAddr").item(0).getFirstChild().getNodeValue(); System.out.println("TaskAddr:"+TaskAddr); } catch(Exception e){ e.printStackTrace(); } finally { try { out.close(); input.close(); } catch (Exception ex) { } }

 三、服务端代码

服务端一般首先获取客户端发来的xml数据,进行解析,并将响应返回给客户端:

Java代码 复制代码
  1. try{   
  2.   
  3. //解析对方发来的xml数据,获得EventID节点的值   
  4.   
  5.        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();   
  6.   
  7.        DocumentBuilder db = dbf.newDocumentBuilder();   
  8.   
  9.        Document d = db.parse(request.getInputStream());   
  10.   
  11.        String evtid = d.getElementsByTagName_r("EventID").item(0).getFirstChild().getNodeValue();   
  12.   
  13. //                   System.out.println("evtid" + evtid);   
  14.   
  15.        //根据evtid查找任务,生成xml字符串   
  16.   
  17.        UfgovDBUtil dbUtil = new UfgovDBUtil();   
  18.   
  19.        String xmlString = dbUtil.fetchTaskData(evtid);   
  20.   
  21. //                   System.out.println("returned xmlString:" + xmlString);   
  22.   
  23.        //把xml字符串写入响应   
  24.   
  25.        byte[] xmlData = xmlString.getBytes();   
  26.   
  27.        response.setContentType("text/xml");   
  28.   
  29.        response.setContentLength(xmlData.length);   
  30.   
  31.        ServletOutputStream os = response.getOutputStream();   
  32.   
  33.        os.write(xmlData);   
  34.   
  35.        os.flush();   
  36.   
  37.        os.close();   
  38.   
  39. }   
  40.   
  41. catch(Exception e){   
  42.   
  43.        e.printStackTrace();   
  44.   
  45. }  
目录
相关文章
|
5月前
|
XML 前端开发 测试技术
如何使用 Postman 发送 POST XML 请求?
使用 Postman 发送带有 XML 数据的 POST 请求。我们将引导您完成将 XML 数据有效发送到 Web 服务或 API 的步骤,使处理这种常见数据格式变得简单易行。
|
15天前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
201 2
|
6月前
|
API 开发者
了解 HTTP 的PUT 与 POST方法的综合指南
HTTP PUT 和 POST 方法是构建 Web 应用与 API 的核心工具,用于资源的创建与更新。PUT 方法通过指定 URL 更新或创建完整资源,具有幂等性;而 POST 方法更灵活,主要用于创建新资源,但不具备幂等性。本文详细对比了两者在请求体、URL 使用、资源处理等方面的区别,并提供了实际应用示例,帮助开发者根据场景选择合适的方法以优化 API 设计。
|
JSON Java 数据安全/隐私保护
java中的http请求的封装(GET、POST、form表单、JSON形式、SIGN加密形式)
java中的http请求的封装(GET、POST、form表单、JSON形式、SIGN加密形式)
907 1
|
10月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
10月前
|
缓存 安全 API
http 的 get 和 post 区别 1000字
【10月更文挑战第27天】GET和POST方法各有特点,在实际应用中需要根据具体的业务需求和场景选择合适的请求方法,以确保数据的安全传输和正确处理。
|
11月前
|
JSON 编解码 安全
【HTTP】方法(method)以及 GET 和 POST 的区别
【HTTP】方法(method)以及 GET 和 POST 的区别
345 1
automate Flow中如何用HTTP,POST的方式发送短信?
automate Flow中如何用HTTP,POST的方式发送短信?
109 2
|
缓存 安全 JavaScript
全面比较HTTP GET与POST方法
全面比较HTTP GET与POST方法
141 7
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
63949 3
详解HTTP四种请求:POST、GET、DELETE、PUT

热门文章

最新文章