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

来源:互联网 发布:java面试专业技能 编辑:程序博客网 时间:2024/05/22 12:02

今天在给平台用户提供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数据,然后获取服务端的响应并进行解析:

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) {             }     }  

三、服务端代码

服务端一般首先获取客户端发来的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();     }  

转自:http://a52071453.iteye.com/blog/1706949

0 0
原创粉丝点击