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

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

一、POST请求
服务器地址: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);  
    }  
}  

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

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 = newbyte[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("TaskAddr").item(0).getFirstChild().getNodeValue();   
        System.out.println("TaskAddr:"+TaskAddr);   
}  catch(Exception e){   
        e.printStackTrace();   
}  finally {   
       try {   
             out.close();   
             input.close();   
        }   
       catch (Exception ex) {   
  
        }   
}  

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

try{   
    //解析对方发来的xml数据,获得EventID节点的值   
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();   
    DocumentBuilder db = dbf.newDocumentBuilder();   
    Document d = db.parse(request.getInputStream());   
    String evtid = d.getElementsByTagName("EventID").item(0).getFirstChild().getNodeValue();   
    //System.out.println("evtid" + evtid);   
    //根据evtid查找任务,生成xml字符串   
 
    UfgovDBUtil dbUtil = new UfgovDBUtil();   
    String xmlString = dbUtil.fetchTaskData(evtid);   
    //System.out.println("returned xmlString:" + xmlString);   
    //把xml字符串写入响应   
    byte[] xmlData = xmlString.getBytes();   
    response.setContentType("text/xml");   
    response.setContentLength(xmlData.length);   
    ServletOutputStream os = response.getOutputStream();   
    os.write(xmlData);   
    os.flush();   
    os.close();  
}  catch(Exception e){   
    e.printStackTrace(); 
}  




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

posted on 2020-11-24 18:46  渴望飞翔的xian鱼  阅读(3190)  评论(0编辑  收藏  举报

导航