HttpClient使用

简介:

1、Get/Post

 
  1. public static void main(String[] args) { 
  2.     HttpClient client = new HttpClient(); 
  3.     GetMethod getMethod = null
  4.     try { 
  5.         getMethod = new GetMethod("http://10.20.136.25/versionData.htm"); 
  6.         int statusCode = client.executeMethod(getMethod); 
  7.  
  8.         if (statusCode == 200) { 
  9.             String body = getMethod.getResponseBodyAsString(); 
  10.             String[] cacheFiles = body.split("\\|"); 
  11.             for (String cacheFile : cacheFiles) { 
  12.                 String[] pairs = cacheFile.split("="); 
  13.                 //one and only one pair 
  14.                 String filename = pairs[0]; 
  15.                 String indicateNumber = pairs[1]; 
  16.                 System.out.println("file:" + filename + ", md5:" 
  17.                         + indicateNumber.split("\\.")[0] + ", dependency md5:" 
  18.                         + indicateNumber.split("\\.")[1]); 
  19.             } 
  20.         } 
  21.     } catch (HttpException e) { 
  22.         e.printStackTrace(); 
  23.     } catch (IOException e) { 
  24.         e.printStackTrace(); 
  25.     } finally { 
  26.         if (getMethod != null) { 
  27.             getMethod.releaseConnection(); 
  28.         } 
  29.     } 

2.https
如何支持https?

java 代码
 
  1. static{  
  2.     Protocol easyhttps = new Protocol("https"new EasySSLProtocolSocketFactory(), 443);  
  3.     Protocol.registerProtocol("https", easyhttps);  
  4. }  

在执行具体的http method之前,将https协议注册一把

3.cookies
java 代码
 
  1. HttpClient httpclient=new HttpClient();  
  2. httpclient.getParams().setCookiePolicy(CookiePolicy.RFC_2109);//RFC_2109是支持较普遍的一个,还有其他cookie协议  
  3. HttpState initialState = new HttpState();  
  4. Cookie cookie=new Cookie();  
  5. cookie.setDomain("www.balblabla.com");  
  6. cookie.setPath("/");  
  7. cookie.setName("多情环");  
  8. cookie.setValue("多情即无情");  
  9. initialState.addCookie(cookie);  
  10. httpclient.setState(initialState);  
  11. ...  

4.解构cookies
java 代码
 
  1. ...//执行了某些get/post方法后  
  2. Cookie[] cookies = httpclient.getState().getCookies();  
  3. System.out.println("Present cookies: ");  
  4. for (int i = 0; i < cookies.length; i++) {//循环结构零部件  
  5.     System.out.println(" - " + cookies[i].toExternalForm());  
  6.     System.out.println(" - domain=" + cookies[i].getDomain());  
  7.     System.out.println(" - path=" + cookies[i].getPath());  
  8.     ...            
  9. }  


5.post参数
post方法在提交参数对时:
java 代码
 
  1. PostMethod postMethod = new PostMethod("http://www.saybot.com/postme");  
  2. NameValuePair[] postData = new NameValuePair[2];  
  3. postData[0] = new NameValuePair("武器""枪");  
  4. postData[1] = new NameValuePair("什么枪""神枪");  
  5. postMethod.addParameters(postData);  
  6. ...//出枪吧  

6.代理(proxy)
代理,非常重要,尤其在局域网横行的年头,没有代理,你在公司上不了QQ,没有代理,google不了网页快照,代理之威,可比七星碧玉刀,无刀,在局域网和开发当中,一切白搭:
java 代码
 
  1. HttpClient httpclient=new HttpClient();  
  2. httpClient.getHostConfiguration().setProxy("192.168.0.1"9527);  
  3. httpClient.getParams().setAuthenticationPreemptive(true);//重要!!!告诉httpclient,使用抢先认证,否则你会收到“你没有资格”的恶果  
  4. /* 
  5.   这一步也至关重要,MyProxyCredentialsProvider实现了org.apache.commons.httpclient.auth.CredentialsProvider接口, 
  6.   返回代理的credential(username/password)*/  
  7. httpClient.getParams().setParameter(CredentialsProvider.PROVIDER, new MyProxyCredentialsProvider());  
  8. httpClient.getState().setProxyCredentials(  
  9.     new AuthScope("192.168.0.1",  
  10.         AuthScope.ANY_PORT, //任意端口哦,可要小心  
  11.         AuthScope.ANY_REALM),//任意域哦,可要小心  
  12. new UsernamePasswordCredentials("username",//proxy的用户名  
  13.                         "password"));//proxy的密码  

7.
看httpclient的官方文档: jakarta.apache.org/commons/httpclient/userguide.html
看Hilton网友写的小葵花宝典笔记: www.cnjm.net/tech/article1155.html

 



本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/1004358,如需转载请自行联系原作者

相关文章
|
5月前
Httpclient使用总结
Httpclient使用总结
36 0
|
运维 监控 负载均衡
HttpClient 你不一定会用
我在凤巢团队独立搭建和运维的一个高流量的推广实况系统,是通过HttpClient 调用大搜的实况服务。最近经常出现Address already in use (Bind failed) 的问题。很明显是一个端口绑定冲突的问题,于是大概排查了一下当前系统的网络连接情况和端口使用情况,
HttpClient 你不一定会用
|
XML JSON Java
再见,HttpClient!再见,Okhttp!
因为业务关系,要和许多不同第三方公司进行对接。这些服务商都提供基于http的api。但是每家公司提供api具体细节差别很大。有的基于RESTFUL规范,有的基于传统的http规范;有的需要在header里放置签名,有的需要SSL的双向认证,有的只需要SSL的单向认证;有的以JSON 方式进行序列化,有的以XML方式进行序列化。类似于这样细节的差别太多了。
396 0
再见,HttpClient!再见,Okhttp!
|
Java 应用服务中间件 API
|
JSON 数据格式 Java