?
? ? ? ? ? ? ? ? ? ? ?
一:简介
?HTTPCLIENT,通过JAVA基于HTTP协议进行点与点间的通信!
?
?
二: 代码举例
?
? ?测试类:
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.springside.modules.web.struts2.Struts2Utils; import com.asiainfo.boss.inter.boss30.remote.thirdpojo.RecordData; import com.asiainfo.boss.inter.web.remote.RemoteInvokeFunc; import com.asiainfo.util.Md5; import com.asiainfo.util.ParamUtils; import com.asiainfo.util.URLReader; import com.asiainfo.web.action.common.FileUtil; public class Test { private static final String WTJT_ORDER_NUM = "JTMHZHYY"; private static final String WTJT_ORDER_NUM_CX = "JTMHZHYYCX"; private static final String WTJT_KEY = "JTYWTYZXZHYY"; //key=TransactionID+Platform+KEY private static final String WTJT_KEY_CX = "JTYWTYZHYYCX"; //key=TransactionID+Platform+KEY public static void main(String[] args) { String url = "http://218.206.204.204:8888/jttiyan/order/cxzhyyorder.action"; long nowTime = System.currentTimeMillis(); StringBuffer sb = new StringBuffer(); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); sb.append("<GroupOrderCx>"); sb.append("<TransactionID>"); sb.append(nowTime); sb.append("</TransactionID>"); sb.append("<Platform>"); sb.append(WTJT_ORDER_NUM_CX); sb.append("</Platform>"); sb.append("<OrderMsisdn>"); sb.append("15838346666"); sb.append("</OrderMsisdn>"); sb.append("<Key>"); String key = nowTime+WTJT_ORDER_NUM_CX+WTJT_KEY_CX;//TransactionID+Platform+KEY sb.append(Md5.md5s_static(key).toUpperCase()); sb.append("</Key>"); sb.append("</GroupOrderCx>"); String ret; try { ret = URLReader.getBodyURLContent(url, sb.toString(), "UTF-8"); System.out.println("ret="+ret); } catch (Exception e) { e.printStackTrace(); } } }
?工具类:
package com.asiainfo.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import com.asiainfo.boss.common.util.XmlUtil;
public class URLReader {
public static String getURLContent(String url,String queryString,String encoding) throws Exception {
HttpClient client = new HttpClient();
// 设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("192.168.200.254", 3128);
// 使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
HttpMethod method = new GetMethod(url);
method.setQueryString(queryString);
try {
int ctimeout = 5000;
int stimeout = 55000;
client.getHttpConnectionManager().getParams().setConnectionTimeout(
ctimeout);
client.getHttpConnectionManager().getParams()
.setSoTimeout(stimeout);
client.executeMethod(method);
// 打印服务器返回的状态
// System.out.println(method.getStatusLine());
InputStream l_urlStream = method.getResponseBodyAsStream();
java.io.BufferedReader l_reader = null;
String sCurrentLine;
StringBuilder sTotalString = new StringBuilder();
l_reader = new java.io.BufferedReader(
new java.io.InputStreamReader(l_urlStream, encoding));
while ((sCurrentLine = l_reader.readLine()) != null) {
sTotalString = sTotalString.append(new StringBuffer(
sCurrentLine));
}
sCurrentLine = null;
l_urlStream.close();
l_urlStream = null;
l_reader.close();
l_reader = null;
method.releaseConnection();
return sTotalString.toString();
} catch (IOException ex) {
throw new Exception(ex.getMessage());
}
}
public static String getPostURLContent(String url, String queryString, String encoding) throws Exception {
HttpClient client = new HttpClient();
// 设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("192.168.200.254", 3128);
HttpMethod method = new PostMethod(url);
method.setQueryString(queryString);
// 使用POST方法
// HttpMethod method = new PostMethod("http://java.sun.com");
try {
int ctimeout = 5000;
int stimeout = 55000;
client.getHttpConnectionManager().getParams().setConnectionTimeout(
ctimeout);
client.getHttpConnectionManager().getParams()
.setSoTimeout(stimeout);
client.executeMethod(method);
// 打印服务器返回的状态
// System.out.println(method.getStatusLine());
InputStream l_urlStream = method.getResponseBodyAsStream();
java.io.BufferedReader l_reader = null;
String sCurrentLine;
StringBuilder sTotalString = new StringBuilder();
l_reader = new java.io.BufferedReader(
new java.io.InputStreamReader(l_urlStream, encoding));
while ((sCurrentLine = l_reader.readLine()) != null) {
sTotalString = sTotalString.append(new StringBuffer(
sCurrentLine));
}
sCurrentLine = null;
l_urlStream.close();
l_urlStream = null;
l_reader.close();
l_reader = null;
method.releaseConnection();
return sTotalString.toString();
} catch (IOException ex) {
throw new Exception(ex.getMessage());
}
}
public static String getBodyURLContent(String url,String body,String encoding) throws Exception {
HttpClient client = new HttpClient();
// 设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("192.168.200.254", 3128);
// 使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
PostMethod method = new PostMethod(url);
//method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
//method.addRequestHeader("Content-Type","text/html;charset=UTF-8");
method.setRequestHeader("Content-Type", "text/html;charset="+encoding);
method.setRequestBody(body);
try {
int ctimeout = 5000;
int stimeout = 55000;
client.getHttpConnectionManager().getParams().setConnectionTimeout(
ctimeout);
client.getHttpConnectionManager().getParams()
.setSoTimeout(stimeout);
client.executeMethod(method);
// 打印服务器返回的状态
// System.out.println(method.getStatusLine());
InputStream l_urlStream = method.getResponseBodyAsStream();
java.io.BufferedReader l_reader = null;
String sCurrentLine;
StringBuilder sTotalString = new StringBuilder();
l_reader = new java.io.BufferedReader(
new java.io.InputStreamReader(l_urlStream, encoding));
while ((sCurrentLine = l_reader.readLine()) != null) {
sTotalString = sTotalString.append(new StringBuffer(
sCurrentLine));
}
sCurrentLine = null;
l_urlStream.close();
l_urlStream = null;
l_reader.close();
l_reader = null;
return sTotalString.toString();
} catch (IOException ex) {
throw ex;
}finally{
method.releaseConnection();
}
}
/*
* 下载一个文件到本地,返回true/false
*/
public static boolean snatchAtFile(String url, String filePath) {
try {
HttpClient client = new HttpClient();
// 设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("192.168.200.254", 3128);
int ctimeout = 5000;
int stimeout = 55000;
client.getHttpConnectionManager().getParams().setConnectionTimeout(
ctimeout);
client.getHttpConnectionManager().getParams()
.setSoTimeout(stimeout);
GetMethod get = new GetMethod(url);
client.executeMethod(get);
File storeFile = new File(filePath);
FileOutputStream output = new FileOutputStream(storeFile);
// 得到网络资源的字节数组,并写入文件
output.write(get.getResponseBody());
output.close();
get.releaseConnection();
} catch (Exception e) {
return false;
}
return true;
}
}
?
?
通信结果:
ret的值:
<?xml version="1.0" encoding="UTF-8"?>
<GroupAccOrder>
<TransactionID>1326875539875</TransactionID>
<Platform>JTMHZHYYCX</Platform>
<ResultCode>0000</ResultCode>
<ResultMsg>
<OrderInfo>
<OrderID>1326870197656</OrderID>
<GroupName>公司名称</GroupName>
<OrderTime>2012-01-18 15:03:22</OrderTime>
<OrderSta>1</OrderSta>
<CusManName></CusManName>
<CusMsisdn></CusMsisdn>
</OrderInfo>
<OrderInfo>
<OrderID>1326869919921</OrderID>
<GroupName>公司名称</GroupName>
<OrderTime>2012-01-1814:58:41</OrderTime>
<OrderSta>1</OrderSta>
<CusManName></CusManName>
<CusMsisdn></CusMsisdn>
</OrderInfo>
<OrderInfo>
<OrderID>1326860084421</OrderID>
<GroupName>公司名称</GroupName>
<OrderTime>2012-01-18 12:14:45</OrderTime>
<OrderSta>1</OrderSta>
<CusManName></CusManName>
<CusMsisdn></CusMsisdn>
</OrderInfo>
</ResultMsg>
</GroupAccOrder>
?
?
总结:
?首先HTTPCLIENT 支持以PostMethod与GetMethod 方式进行通信!除了设置PostMethod的实例与GetMethod有些不同之外,剩下的步骤都差不多。
下面来看看它们的实现步骤:
1. 创建 HttpClient 的实例
2. 创建某种连接方法的实例,在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址
3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例
4. 读 response
5. 释放连接。无论执行方法是否成功,都必须释放连接
6. 对得到后的内容进行处理
?