- <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>
- <!--視頻點送: 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

