今天在给平台用户提供http简单接口的时候,顺便写了个调用的Java类供他参考。服务器地址:http://5.0.217.50:17001/VideoSend服务器提供的是xml格式的http接口,接口定义如下:
%s
service
%s
%s
%s
%s
%s
service
rescode>%s
对应调用端的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("");
sb.append(" ");
sb.append(" 1");
sb.append(" service");
sb.append(" ");
sb.append(" ");
sb.append(" 0000021000011001");
sb.append(" 33647405");
sb.append(" mnt/5.0.217.50/resources/80009.mov");
sb.append(" 0000021000011001");
sb.append(" ");
sb.append("");
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代码
String xmlString ="<?xml version='1.0' encoding='gb2312'?>"
+""
+""
+"101"
+""
+"";
byte[] xmlData = xmlString.getBytes();
String urlStr ="http://124.128.62.164:7001/FetchTaskDataServlet";
DataInputStream input =null;
java.io.ByteArrayOutputStream out =null;
try{
//获得到位置服务的链接
URL url =newURL(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 =newDataOutputStream(urlCon.getOutputStream());
printout.write(xmlData);
printout.flush();
printout.close();
input =newDataInputStream(urlCon.getInputStream());
byte[] rResult;
out =newjava.io.ByteArrayOutputStream();
byte[] bufferByte =newbyte[256];
intl = -1;
intdownloadSize =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(newByteArrayInputStream(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数据,进行解析,并将响应返回给客户端:
Java代码
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 =newUfgovDBUtil();
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();
}