HttpClient是一个模拟HTTP请求的工具类,目前我们在两个地方用到了HttpClient。
- Eclipse插件调用第三方的HTTP接口。
- Action自动化测试。
我们对HttpClient进行了一个简单的封装:
package com.alibaba.itu.tala.util;
import static org.apache.commons.httpclient.params.HttpMethodParams.SO_TIMEOUT;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
/**
* HTTP 工具类.
*
* @author tengfei.fangtf
*
*/
public class HttpUtil {
/**
* 默认编码为 GB2312
*/
private static final String HTTP_CONTENT_CHARSET = "gb2312";
private static TalaLogger log = TalaLogger.getLogger();
public static final Integer MAX_TIME_OUT = 5000;
public static final Integer MAX_IDLE_TIME_OUT = 60000;
public static final Integer MAX_CONN = 100;
public static HttpClient httpClient = null;
static {
MultiThreadedHttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
connectionManager.closeIdleConnections(MAX_IDLE_TIME_OUT);
connectionManager.getParams().setParameter(
"http.connection-manager.max-total", MAX_CONN);
httpClient = new HttpClient(connectionManager);
httpClient.getParams().setParameter(SO_TIMEOUT,
MAX_TIME_OUT);
httpClient.getParams().setParameter("http.connection.timeout",
MAX_TIME_OUT);
httpClient.getParams().setParameter("http.connection-manager.timeout",
MAX_TIME_OUT.longValue());
}
/**
* 发送HTTP请求
*
* @param url
* @param param
* @return HTTP响应
*/
public static String sendSimplePostRequest(String url,
Map<String, Object> param) {
// HTTP方法,还有get,head,put,delete,connect,options(询问可用的选项)
PostMethod post = new PostMethod(url);
post.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,
HTTP_CONTENT_CHARSET);
if (param != null) {
for (Entry<String, Object> entry : param.entrySet()) {
// 排除掉空值
if (entry.getValue() != null) {
post.addParameter(entry.getKey(), entry.getValue()
.toString());
}
}
}
try {
post.addRequestHeader(new Header("Connection", "close"));
// post.addRequestHeader("Cookie", "ID=1"); //添加Cookie
httpClient.executeMethod(post);
if (post.getStatusCode() == HttpStatus.SC_OK) {
return post.getResponseBodyAsString();
} else {
post.abort();//马上断开连接
log.error("Http Comunication error ! code --> "
+ post.getStatusCode(), null);
}
} catch (Exception e) {
log
.error("Http post occur error!url=" + url + ",param="
+ param, e);
} finally {
post.releaseConnection();
}
return null;
}
}
依赖jakarta.commons.httpclient-3.1.jar