HttpClient的使用

来源:互联网 发布:夏老师c语言百度云资源 编辑:程序博客网 时间:2024/06/12 21:01

   首先,简单介绍下HttpClientHttpClientApache Jakarta Common下的子项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。大家都知道JDKjava 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对于要求接受后继服务的请求,象POSTPUT等不能自动处理转发

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中使用代理服务器非常简单,调用HttpClientsetProxy方法就可以,方法的第一个参数是代理服务器地址,第二个参数是端口号。另外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;包

0 0
原创粉丝点击