Apache Common HttpClient的使用之道
HTTP协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient,更多使用 HttpClient 的应用可以参见http://wiki.apache.org/jakarta-httpclient/HttpClientPowered。HttpClient项目非常活跃,使用的人还是非常多的。目前 HttpClient 版本是在 2005.10.11 发布的 3.0 RC4 。1.拳头之Get/Post
拳头是最基本的一重武器,也是最重要的,好比练武之人必须先扎稳马步。
java 代码
[*]HttpClienthttpclient=newHttpClient();//创建一个客户端,类似打开一个浏览器
[*]GetMethodgetMethod=newGetMethod("http://www.blablabla.com");//创建一个get方法,类似在浏览器地址栏中输入一个地址
[*]intstatusCode=httpclient.executeMethod(getMethod);//回车——出拳!
[*]System.out.println("response="+getMethod.getResponseBodyAsString());//察看拳头命中情况,可以获得的东西还有很多,比如head,cookies等等
[*]getMethod.releaseConnection();//释放,记得收拳哦
2.孔雀翎之支持https
如何支持https?
java 代码
[*]static{
[*]Protocoleasyhttps=newProtocol("https",newEasySSLProtocolSocketFactory(),443);
[*]Protocol.registerProtocol("https",easyhttps);
[*]}
在执行具体的http method之前,暗中将https协议注册一把,如孔雀翎暗藏玄机,毙敌于无形。记住,官方的binary发行版本没有ssl的contribute包,方法一是下载源代码版本来打造你的孔雀翎。
3.多情环之cookies
常道人老多情,其实是记忆太多,所以情之所至,正如cookies甜心,无论你走到那,总把你牵挂:
java 代码
[*]HttpClienthttpclient=newHttpClient();
[*]httpclient.getParams().setCookiePolicy(CookiePolicy.RFC_2109);//RFC_2109是支持较普遍的一个,还有其他cookie协议
[*]HttpStateinitialState=newHttpState();
[*]Cookiecookie=newCookie();
[*]cookie.setDomain("www.balblabla.com");
[*]cookie.setPath("/");
[*]cookie.setName("多情环");
[*]cookie.setValue("多情即无情");
[*]initialState.addCookie(cookie);
[*]httpclient.setState(initialState);
[*]...
4.离别钩之解构cookies
多情环的反面即离别钩,钩出,敌之身体某个部件即要与身体别离,端的是无情:
java 代码
[*]...//执行了某些get/post方法后
[*]Cookie[]cookies=httpclient.getState().getCookies();
[*]System.out.println("Presentcookies:");
[*]for(inti=0;i<cookies.length;i++){//循环结构零部件
[*]System.out.println("-"+cookies.toExternalForm());
[*]System.out.println("-domain="+cookies.getDomain());
[*]System.out.println("-path="+cookies.getPath());
[*]...
[*]}
5.霸王抢之post参数
枪,长兵器之王,诸多名将均使一杆或金或银命名的名枪,比如岳飞。post方法在提交参数对时,犹如灵蛇出洞:
java 代码
[*]PostMethodpostMethod=newPostMethod("http://www.saybot.com/postme");
[*]NameValuePair[]postData=newNameValuePair;
[*]postData=newNameValuePair("武器","枪");
[*]postData=newNameValuePair("什么枪","神枪");
[*]postMethod.addParameters(postData);
[*]...//出枪吧
6.七星碧玉刀之支持代理(proxy)
代理,非常重要,尤其在局域网横行的年头,没有代理,你在公司上不了QQ,没有代理,google不了网页快照,代理之威,可比七星碧玉刀,无刀,在局域网和开发当中,一切白搭:
java 代码
[*]HttpClienthttpclient=newHttpClient();
[*]httpClient.getHostConfiguration().setProxy("192.168.0.1",9527);
[*]httpClient.getParams().setAuthenticationPreemptive(true);//重要!!!告诉httpclient,使用抢先认证,否则你会收到“你没有资格”的恶果
[*]/*
[*]这一步也至关重要,MyProxyCredentialsProvider实现了org.apache.commons.httpclient.auth.CredentialsProvider接口,
[*]返回代理的credential(username/password)*/
[*]httpClient.getParams().setParameter(CredentialsProvider.PROVIDER,newMyProxyCredentialsProvider());
[*]httpClient.getState().setProxyCredentials(
[*]newAuthScope("192.168.0.1",
[*]AuthScope.ANY_PORT,//任意端口哦,可要小心
[*]AuthScope.ANY_REALM),//任意域哦,可要小心
[*]newUsernamePasswordCredentials("username",//proxy的用户名
[*]"password"));//proxy的密码
页:
[1]