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

 
Java代码
  1. <span style=""> </span><span style="">今天在给平台用户提供http简单接口的时候,顺便写了个调用的Java类供他参考。</span><br style=""><span style="">     服务器地址:http://5.0.217.50:17001/VideoSend</span><br style=""><span style="">     服务器提供的是xml格式的http接口,接口定义如下:</span>  
Java代码  收藏代码
  1. <!--视频点送: videoSend-->  
  2. <videoSend>  
  3.     <header>  
  4.         <sid>%s</sid>   
  5.         <type>service</type>   
  6.     </header>  
  7.     <service name="videoSend">  
  8.     <fromNum>%s</fromNum>       
  9.     <toNum>%s</toNum>                   <!--需要接通的用户的电话号码 -->  
  10.     <videoPath>%s</videoPath>           <!--视频文件路径 -->  
  11.     <chargeNumber>%s</chargeNumber>     <!--计费号码 -->  
  12.     </service>  
  13. </videoSend>  
  14.   
  15.   
  16. <!--视频点送返回结果: videoSendResult-->  
  17. <videoSend>  
  18.     <header>  
  19.     <sid>%s</sid>   
  20.     <type>service</type>   
  21.     </header>  
  22.     <service name="videoSendResult">  
  23.     rescode>%s</rescode>                 <!--0000:视频点送成功,0001:请求参数信息错误, 0002:接通用户失败-->  
  24.     </service>  
  25. </videoSend>  

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

 

Java代码  收藏代码
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4. import java.io.OutputStreamWriter;  
  5. import java.net.MalformedURLException;  
  6. import java.net.URL;  
  7. import java.net.URLConnection;  
  8.   
  9. public class HttpPostTest {  
  10.     void testPost(String urlStr) {  
  11.         try {  
  12.             URL url = new URL(urlStr);  
  13.             URLConnection con = url.openConnection();  
  14.             con.setDoOutput(true);  
  15.             con.setRequestProperty("Pragma:", "no-cache");  
  16.             con.setRequestProperty("Cache-Control", "no-cache");  
  17.             con.setRequestProperty("Content-Type", "text/xml");  
  18.   
  19.             OutputStreamWriter out = new OutputStreamWriter(con  
  20.                     .getOutputStream());      
  21.             String xmlInfo = getXmlInfo();  
  22.             System.out.println("urlStr=" + urlStr);  
  23.             System.out.println("xmlInfo=" + xmlInfo);  
  24.             out.write(new String(xmlInfo.getBytes("ISO-8859-1")));  
  25.             out.flush();  
  26.             out.close();  
  27.             BufferedReader br = new BufferedReader(new InputStreamReader(con  
  28.                     .getInputStream()));  
  29.             String line = "";  
  30.             for (line = br.readLine(); line != null; line = br.readLine()) {  
  31.                 System.out.println(line);  
  32.             }  
  33.         } catch (MalformedURLException e) {  
  34.             e.printStackTrace();  
  35.         } catch (IOException e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.     }  
  39.   
  40.     private String getXmlInfo() {  
  41.         StringBuilder sb = new StringBuilder();  
  42.         sb.append("<videoSend>");  
  43.         sb.append("    <header>");  
  44.         sb.append("        <sid>1</sid>");  
  45.         sb.append("        <type>service</type>");  
  46.         sb.append("    </header>");  
  47.         sb.append("    <service name=\"videoSend\">");  
  48.         sb.append("        <fromNum>0000021000011001</fromNum>");  
  49.         sb.append("           <toNum>33647405</toNum>");  
  50.         sb.append("        <videoPath>mnt/5.0.217.50/resources/80009.mov</videoPath>");  
  51.         sb.append("        <chargeNumber>0000021000011001</chargeNumber>");  
  52.         sb.append("    </service>");  
  53.         sb.append("</videoSend>");  
  54.         return sb.toString();  
  55.     }  
  56.   
  57.     public static void main(String[] args) {  
  58.         String url = "http://5.0.217.50:17001/VideoSend";  
  59.         new HttpPostTest().testPost(url);  
  60.     }  
  61. }  

 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. }  
    46. 转自:http://a52071453.iteye.com/blog/1706949
posted @ 2015-08-28 09:37  发现一个bug  阅读(34249)  评论(1编辑  收藏  举报