注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

模拟HttpClient的HTTP工具类(对对HttpClient进行封装)  

2012-12-31 17:34:19|  分类: 测试 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

新浪微博:IT国子监(记得关注噢) http://weibo.com/itguozijian


HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient,然后根据作者实际工作经验给出了一些常见问题的解决方法。

HttpClient是一个模拟HTTP请求的工具类,目前我们在两个地方用到了HttpClient。

  1. Eclipse插件调用第三方的HTTP接口。
  2. Action自动化测试。

我们对HttpClient进行了一个简单的封装:

 

Java代码 
  1. package com.alibaba.itu.tala.util;  
  2.   
  3. import static org.apache.commons.httpclient.params.HttpMethodParams.SO_TIMEOUT;  
  4.   
  5. import java.util.Map;  
  6. import java.util.Map.Entry;  
  7.   
  8. import org.apache.commons.httpclient.Header;  
  9. import org.apache.commons.httpclient.HttpClient;  
  10. import org.apache.commons.httpclient.HttpStatus;  
  11. import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;  
  12. import org.apache.commons.httpclient.methods.PostMethod;  
  13. import org.apache.commons.httpclient.params.HttpMethodParams;  
  14.   
  15. /** 
  16.  * HTTP 工具类. 
  17.  *  
  18.  * @author tengfei.fangtf 
  19.  *  
  20.  */  
  21. public class HttpUtil {  
  22.   
  23.     /** 
  24.      * 默认编码为 GB2312 
  25.      */  
  26.     private static final String HTTP_CONTENT_CHARSET = "gb2312";  
  27.   
  28.     private static TalaLogger log = TalaLogger.getLogger();  
  29.   
  30.     public static final Integer MAX_TIME_OUT = 5000;  
  31.     public static final Integer MAX_IDLE_TIME_OUT = 60000;  
  32.     public static final Integer MAX_CONN = 100;  
  33.   
  34.     public static HttpClient httpClient = null;  
  35.   
  36.     static {  
  37.         MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();  
  38.         connectionManager.closeIdleConnections(MAX_IDLE_TIME_OUT);  
  39.         connectionManager.getParams().setParameter(  
  40.                 "http.connection-manager.max-total", MAX_CONN);  
  41.         httpClient = new HttpClient(connectionManager);  
  42.         httpClient.getParams().setParameter(SO_TIMEOUT,  
  43.                 MAX_TIME_OUT);  
  44.         httpClient.getParams().setParameter("http.connection.timeout",  
  45.                 MAX_TIME_OUT);  
  46.         httpClient.getParams().setParameter("http.connection-manager.timeout",  
  47.                 MAX_TIME_OUT.longValue());  
  48.     }  
  49.   
  50.     /** 
  51.      * 发送HTTP请求 
  52.      *  
  53.      * @param url 
  54.      * @param param 
  55.      * @return HTTP响应 
  56.      */  
  57.     public static String sendSimplePostRequest(String url,  
  58.             Map<String, Object> param) {  
  59.         // HTTP方法,还有get,head,put,delete,connect,options(询问可用的选项)  
  60.         PostMethod post = new PostMethod(url);  
  61.         post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,  
  62.                 HTTP_CONTENT_CHARSET);  
  63.         if (param != null) {  
  64.             for (Entry<String, Object> entry : param.entrySet()) {  
  65.                 // 排除掉空值  
  66.                 if (entry.getValue() != null) {  
  67.                     post.addParameter(entry.getKey(), entry.getValue()  
  68.                             .toString());  
  69.                 }  
  70.             }  
  71.         }  
  72.         try {  
  73.             post.addRequestHeader(new Header("Connection""close"));  
  74.             // post.addRequestHeader("Cookie", "ID=1"); //添加Cookie  
  75.             httpClient.executeMethod(post);  
  76.             if (post.getStatusCode() == HttpStatus.SC_OK) {  
  77.                 return post.getResponseBodyAsString();  
  78.             } else {  
  79.                 post.abort();//马上断开连接  
  80.                 log.error("Http Comunication error ! code --> "  
  81.                         + post.getStatusCode(), null);  
  82.             }  
  83.         } catch (Exception e) {  
  84.             log  
  85.                     .error("Http post occur error!url=" + url + ",param="  
  86.                             + param, e);  
  87.         } finally {  
  88.             post.releaseConnection();  
  89.         }  
  90.         return null;  
  91.     }  
  92.   
  93. }  
 

依赖jakarta.commons.httpclient-3.1.jar


新浪微博:IT国子监(记得关注噢) http://weibo.com/itguozijian

  评论这张
 
阅读(2207)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016