`

Java发HTTP POST请求(内容为xml格式)

    博客分类:
  • xml
 
阅读更多

 今天在给平台用户提供http简单接口的时候,顺便写了个调用的Java类供他参考。
     服务器地址:http://5.0.217.50:17001/VideoSend
     服务器提供的是xml格式的http接口,接口定义如下:
<!--视频点送: videoSend-->
<videoSend>
    <header>
        <sid>%s</sid> 
        <type>service</type> 
    </header>
    <service name="videoSend">
    <fromNum>%s</fromNum>     
    <toNum>%s</toNum>                   <!--需要接通的用户的电话号码 -->
    <videoPath>%s</videoPath>           <!--视频文件路径 -->
    <chargeNumber>%s</chargeNumber>     <!--计费号码 -->
    </service>
</videoSend>


<!--视频点送返回结果: videoSendResult-->
<videoSend>
    <header>
    <sid>%s</sid> 
    <type>service</type> 
    </header>
    <service name="videoSendResult">
    rescode>%s</rescode>                 <!--0000:视频点送成功,0001:请求参数信息错误, 0002:接通用户失败-->
    </service>
</videoSend>

对应调用端的Java代码(只是个demo,参数都暂时写死了)如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class HttpPostTest {
    void testPost(String urlStr) {
        try {
            URL url = new URL(urlStr);
            URLConnection con = url.openConnection();
            con.setDoOutput(true);
            con.setRequestProperty("Pragma:", "no-cache");
            con.setRequestProperty("Cache-Control", "no-cache");
            con.setRequestProperty("Content-Type", "text/xml");

            OutputStreamWriter out = new OutputStreamWriter(con
                    .getOutputStream());    
            String xmlInfo = getXmlInfo();
            System.out.println("urlStr=" + urlStr);
            System.out.println("xmlInfo=" + xmlInfo);
            out.write(new String(xmlInfo.getBytes("ISO-8859-1")));
            out.flush();
            out.close();
            BufferedReader br = new BufferedReader(new InputStreamReader(con
                    .getInputStream()));
            String line = "";
            for (line = br.readLine(); line != null; line = br.readLine()) {
                System.out.println(line);
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private String getXmlInfo() {
        StringBuilder sb = new StringBuilder();
        sb.append("<videoSend>");
        sb.append("    <header>");
        sb.append("        <sid>1</sid>");
        sb.append("        <type>service</type>");
        sb.append("    </header>");
        sb.append("    <service name=\"videoSend\">");
        sb.append("        <fromNum>0000021000011001</fromNum>");
        sb.append("           <toNum>33647405</toNum>");
        sb.append("        <videoPath>mnt/5.0.217.50/resources/80009.mov</videoPath>");
        sb.append("        <chargeNumber>0000021000011001</chargeNumber>");
        sb.append("    </service>");
        sb.append("</videoSend>");
        return sb.toString();
    }

    public static void main(String[] args) {
        String url = "http://5.0.217.50:17001/VideoSend";
        new HttpPostTest().testPost(url);
    }
}

 2 XML传输

二、客户端代码

通过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 = newbyte[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("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. }  
  101. 三、服务端代码

    服务端一般首先获取客户端发来的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("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. }  
分享到:
评论
3 楼 953434367 2016-11-27  
UfgovDBUtil 是什么类
2 楼 operating...mydream 2015-04-10  
第二个XML的 如果XML内容包含了中文会报错,是不是要转码呢??
1 楼 AnnaBelle35 2014-09-10  
求这个UfgovDBUtil 类

相关推荐

    发送Post请求,内容格式为xml,并获取响应内容

    在IT领域,特别是Web开发与服务交互中,发送POST请求并处理XML格式的数据是一项常见的需求。根据提供的文件信息,我们可以深入解析如何使用Java语言通过Apache HttpClient库来实现这一功能。 ### 发送POST请求并...

    HttpPost_xml.java java http-post xml格式客户端请求代码

    java http-post xml格式客户端请求代码

    dxServlet.java处理Http Post的表单请求xml

    ### dxServlet.java 处理 HTTP Post 的表单请求 XML #### 概述 在 Java 开发中,处理 HTTP 请求是一项常见的任务。对于基于 Web 的应用而言,能够有效地解析和响应 HTTP POST 请求中的 XML 数据至关重要。本文将...

    java http 发送xml报文(java发送xml报文实例+参数)

    发送XML报文通常涉及到POST或GET请求,这里以POST请求为例,因为POST更适合发送大量数据,如XML文档。 1. **创建XML文档** 在发送XML之前,我们需要先构建XML文档。可以使用DOM(Document Object Model)或者SAX...

    http请求,xml格式

    在开发过程中,开发者可能使用各种编程语言(如Java、Python、JavaScript等)和库(如Apache HttpClient、requests、jQuery等)来构造和发送XML格式的HTTP请求。这些工具通常提供了方便的方法来构建XML文档、设置...

    http post 发送xml数据

    与GET请求不同,POST请求的数据通常包含在请求正文中,这使得它适合传输大体积或敏感数据,如XML文档。 要实现HTTP POST发送XML数据,我们需要一个客户端库来构建和发送HTTP请求。在这个场景下,`commons-...

    java中main方法发送httpPost请求

    因为我们是发送POST请求,所以需要设置请求方法为POST: ```java connection.setRequestMethod("POST"); ``` 3. **设置请求属性** 通常,POST请求需要设置Content-Type,表明我们要发送的数据类型: ```...

    java http 发送xml报文

    在给定的代码片段中,我们看到一个名为`TestHttp`的类,其中包含了一个名为`testRegist`的方法,该方法实现了通过HTTP POST请求发送XML报文的功能。 #### 代码解析 - **创建XML字符串**:首先,通过`StringBuffer`...

    JAVA postxml

    在Java中,实现HTTP POST请求并发送XML数据是常见的需求,尤其是在与Web服务进行交互时。下面将详细阐述如何使用Java来完成这一任务。 #### 1. 导入必要的库 首先,你需要导入处理网络请求、读取文件和处理流的...

    (完整版)JAVA利用HttpClient进行POST请求(HTTPS).doc

    "JAVA利用HttpClient进行POST请求(HTTPS)" JAVA HttpClient是Apache软件基金会提供的一个开源实现HTTP客户端的Java库,能够帮助开发者轻松地与HTTP服务器进行交互。在实际项目中,我们经常需要使用HttpClient来发送...

    java发送JSON格式的http通讯的post请求

    总结来说,Java发送JSON格式的HTTP POST请求涉及以下几个关键步骤: 1. 引入Apache HttpClient和JSON处理库。 2. 创建HTTP客户端并构建POST请求。 3. 设置请求头,表明请求内容为JSON格式。 4. 序列化Java对象为JSON...

    java 中HttpClient传输xml字符串实例详解

    最后,我们需要使用HttpClient发送POST请求。首先,创建一个`CloseableHttpClient`实例,然后构建一个`HttpPost`对象,指定请求的URL。接着,设置`HttpPost`的实体为之前创建的`InputStreamEntity`,并执行请求: `...

    JAVA发送HTTP请求,返回HTTP响应内容

    【JAVA发送HTTP请求,返回HTTP响应内容】 在Java编程中,发送HTTP请求并接收响应是常见的网络通信操作,尤其在Web服务的开发和测试中。本文将详细介绍如何使用Java发送HTTP请求并处理响应内容。 首先,我们需要...

    Java发https请求证书问题

    3. **设置请求方法**:接下来通过 `setRequestMethod()` 方法设置 HTTP 请求类型为 POST。 4. **启用输入输出流**:分别调用 `setDoOutput(true)` 和 `setDoInput(true)` 方法开启数据的输出和输入功能。 5. **打印...

    jdom解析xml java发送post请求

    在IT行业中,XML(eXtensible Markup Language)是一种用于数据交换的标准格式,而Java作为广泛应用的编程语言,经常需要处理XML数据。JDOM是Java中一个专门用于处理XML的库,它提供了一种高效、方便的方式来读取、...

    【Delphi】http post请求 webservices接口

    在与Web服务交互时,POST请求常用来传递请求参数,这些参数通常以XML格式封装在请求体中。 SOAP是一种基于XML的协议,用于在分布式环境中交换结构化信息。它允许不同平台和语言的应用程序通过HTTP、SMTP等传输协议...

    java模拟post请求

    然后,我们创建了一个`StringEntity`,将POST请求的数据以JSON格式设置为请求体,并指定其内容类型为"application/json"。接着,我们使用`HttpClient`发送请求,并获取响应。最后,我们处理响应状态码和响应内容。 ...

    java 通过模板生成 xml,发送报文

    总结起来,Java通过模板生成XML并发送报文涉及XML文档对象的创建、元素的构建、模板引擎的应用以及HTTP请求的发送。理解这些概念并熟练掌握相关API,能帮助开发者在实际工作中高效地处理XML数据的生成与传输。

    无参数的post请求

    这里需要注意的是,虽然题目描述为“无参数的POST请求”,但实际上这段代码是将XML数据作为请求体发送的。因此,这实际上并不是一个真正的无参数POST请求。 #### 四、实现真正的无参数POST请求 为了实现真正的无...

    httpclient 客户端发送xml报文到服务器端采用post方式(加密)传递

    在IT行业中,XML(eXtensible Markup Language)是一种用于数据交换的标准格式,尤其在Web服务和客户端-服务器通信中广泛应用。本示例探讨的是如何使用HTTPClient库在客户端发送XML报文到服务器端,且报文通过POST...

Global site tag (gtag.js) - Google Analytics