首先,简单介绍下HttpClient,HttpClient是Apache Jakarta Common下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。大家都知道JDK的java net包中已经提供了访问HTTP协议的基本功能,但是对于大部分应用程序来说,JDK库本身提供的功能还不够丰富和灵活。
一、HTTPClient基本功能。(代码以httpclient3.1版本为例,其他版本请查询官方相关文档)
(1)GET方法
使用HttpClient需要以下6个步骤:
1、创建HttpClient的实例
HttpClient client = new HttpClient();
2、创建某种连接方法的实例,在这里是GetMethod。在GetMethod的构造函数中传入待连接的地址
String str = “http://twitter.com/statuses/friends/xxx.json?cursor=-1”;
GetMethod method = new GetMethod(str);
3、调用第一步中创建好的实例的execute方法来执行第二步中创建好的method实例
client.excuterMethod(get);
4、读response
String responseString = method.getResponseBodyAsString();
5、释放连接。无论执行方法是否成功,都必须释放连接
method.releaseConnection();
6、对得到后的内容进行处理
System.out.println(responseString);
(2)Post方法
1、创建HttpClient的实例
HttpClient client = new HttpClient();
2、创建某种连接方法的实例,在这里是PostMethod。在PostMethod的构造函数中传入待连接的地址
String url =” ”;
PostMethod postMethod = new PostMethod(url);
3、填入各个表单域的值
NameValuePair[] data ={new NameValuePair(“id”,”yourUserName”),
new NmaeValuePair(“passwor”,”yourPwd”)};
4、将表单的值放入postMethod中
pstMEthod.setRequestBody(data);
5、执行postMethod
int statusCode =client.executeMethod(postMethod);
6、HttpClient对于要求接受后继服务的请求,象POST和PUT等不能自动处理转发
301或者302
if (statusCode == HttpStatus SC_MOVED_PERMANENTLY ||
statusCode == HttpStatus SC_MOVED_TEMPORARILY) {
7、从头中取出转向的地址
Header locationHeader = postMethod.getResponseHeader("location");
String location = null;
if (locationHeader != null) {
location = locationHeader.getValue();
System.out.println("The page was redirected to:" + location);
} else {
System.err.println("Location field value is null.");
}
return;
}
二、HttpClietn中使用代理服务器
HttpClient中使用代理服务器非常简单,调用HttpClient中setProxy方法就可以,方法的第一个参数是代理服务器地址,第二个参数是端口号。另外HttpClient也支持SOCKS代理。
client.getHostConfiguration().setProxy(hostName,port);
如:client.getHostConfiguration().setProxy("127.0.0.1", 443);
三、HttpClient处理认证
HttpClient三种不同的认证方案: Basic, Digest and NTLM. 这些方案可用于服务器或代理对客户端的认证,简称服务器认证或代理认证。
下面只讲讲服务器认证中的抢先认证:通过下述方法打开
client.getState().setAuthenticationPreemptive(true);
目前用这种:client.getParams().setAuthenticationPreemptive(true);
注:new DefaultHttpClient()方法属于org.apache.http.impl.client.DefaultHttpClient;包而 new HttpClient();属于org.apachorg.apache.commons.httpclient.HttpClient;包