关于Http Post Xml

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

关于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. }  
目录
相关文章
|
7月前
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
47 0
|
26天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
26天前
|
缓存 安全 API
http 的 get 和 post 区别 1000字
【10月更文挑战第27天】GET和POST方法各有特点,在实际应用中需要根据具体的业务需求和场景选择合适的请求方法,以确保数据的安全传输和正确处理。
|
2月前
|
JSON 编解码 安全
【HTTP】方法(method)以及 GET 和 POST 的区别
【HTTP】方法(method)以及 GET 和 POST 的区别
114 1
|
7月前
|
JSON Java 数据安全/隐私保护
java中的http请求的封装(GET、POST、form表单、JSON形式、SIGN加密形式)
java中的http请求的封装(GET、POST、form表单、JSON形式、SIGN加密形式)
536 1
|
4月前
automate Flow中如何用HTTP,POST的方式发送短信?
automate Flow中如何用HTTP,POST的方式发送短信?
44 2
|
6月前
|
缓存 安全 JavaScript
全面比较HTTP GET与POST方法
全面比较HTTP GET与POST方法
61 7
|
7月前
|
存储 缓存 JSON
详解HTTP四种请求:POST、GET、DELETE、PUT
【4月更文挑战第3天】
22877 1
详解HTTP四种请求:POST、GET、DELETE、PUT
|
6月前
|
JSON 安全 Java
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
JAVA Socket 实现HTTP与HTTPS客户端发送POST与GET方式请求
80 0
|
7月前
|
网络架构 Python
在Flask中,如何定义路由并处理HTTP请求的不同方法(GET、POST等)?
【4月更文挑战第25天】在Flask中,使用`@app.route()`装饰器定义路由,如`/hello`,处理GET请求返回&#39;Hello, World!&#39;。通过添加`methods`参数,可处理不同HTTP方法,如POST请求。单一函数可处理多种方法,通过检查`request.method`区分。动态路由使用 `&lt;variable_name&gt;` 传递URL变量到视图函数。这些基础构成处理HTTP请求的Flask应用。
109 1

热门文章

最新文章