import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethodBase;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* HttpClient请求工具
*/
public class HttpClientUtil {
private static Log log = LogFactory.getLog(HttpClientUtil.class);
private static final int TIMEOUT = 180000;
private static final String POST = "post";
private static final String GET = "get";
public static final String UTF8_CHARSET = "UTF-8";
public static final String GBK_CHARSET = "GBK";
/**
* 向指定URL发送GET方法的请求
* @param url 发送请求的 URL
* @param param 请求参数
* @return 所代表远程资源的响应结果
*/
public static String sendGet(String url, Map<String,String> param,String charset) {
GetMethod method = new GetMethod(url);
if(param == null){
param = new HashMap<String,String>();
}
return execute(method,url,param,charset,GET);
}
/**
* 向指定 URL 发送POST方法的请求
* @param url 发送请求的 URL
* @param param 请求参数
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, Map<String,String> param,String charset) {
PostMethod method = new PostMethod(url);
if(param == null){
param = new HashMap<String,String>();
}
return execute(method,url,param,charset,POST);
}
/**
* 执行HttpClient请求
* @return
*/
private static String execute(HttpMethodBase method,String url,Map<String,String> param,String charset,String type){
try {
HttpClient httpClient = new HttpClient();
httpClient.getParams().setContentCharset(charset);
httpClient.getParams().setConnectionManagerTimeout(TIMEOUT);
method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, TIMEOUT);
method.setRequestHeader("ContentType","application/x-www-form-urlencoded;charset="+charset);
method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, charset);
//请求信息封装
NameValuePair[] data = new NameValuePair[param.size()];
Iterator<Entry<String, String>> iter = param.entrySet().iterator();
int i=0;
while(iter.hasNext()){
Entry<String, String> entry = iter.next();
data[i] = new NameValuePair(entry.getKey(), entry.getValue());
i++;
}
if(type.equals(GET)){
method.setQueryString(data);
}else{
PostMethod postMethod = (PostMethod)method;
postMethod.setRequestBody(data);
}
httpClient.executeMethod(method);
String submitResult = IOUtils.toString(method.getResponseBodyAsStream(), charset);
return submitResult;
} catch (Exception e) {
log.error(getRequestParam(url,param), e);
}
return null;
}
/**
* 拼装请求参数信息
*/
private static String getRequestParam(String url, Map<String,String> param){
Iterator<Entry<String, String>> iter = param.entrySet().iterator();
StringBuffer sb = new StringBuffer();
sb.append("HTTPClient请求URL地址:").append(url).append(",请求参数:");
sb.append("[");
while(iter.hasNext()){
Entry<String, String> entry = iter.next();
sb.append(entry.getKey()).append("=").append(entry.getValue());
if(iter.hasNext()){
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
}
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethodBase;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* HttpClient请求工具
*/
public class HttpClientUtil {
private static Log log = LogFactory.getLog(HttpClientUtil.class);
private static final int TIMEOUT = 180000;
private static final String POST = "post";
private static final String GET = "get";
public static final String UTF8_CHARSET = "UTF-8";
public static final String GBK_CHARSET = "GBK";
/**
* 向指定URL发送GET方法的请求
* @param url 发送请求的 URL
* @param param 请求参数
* @return 所代表远程资源的响应结果
*/
public static String sendGet(String url, Map<String,String> param,String charset) {
GetMethod method = new GetMethod(url);
if(param == null){
param = new HashMap<String,String>();
}
return execute(method,url,param,charset,GET);
}
/**
* 向指定 URL 发送POST方法的请求
* @param url 发送请求的 URL
* @param param 请求参数
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String url, Map<String,String> param,String charset) {
PostMethod method = new PostMethod(url);
if(param == null){
param = new HashMap<String,String>();
}
return execute(method,url,param,charset,POST);
}
/**
* 执行HttpClient请求
* @return
*/
private static String execute(HttpMethodBase method,String url,Map<String,String> param,String charset,String type){
try {
HttpClient httpClient = new HttpClient();
httpClient.getParams().setContentCharset(charset);
httpClient.getParams().setConnectionManagerTimeout(TIMEOUT);
method.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, TIMEOUT);
method.setRequestHeader("ContentType","application/x-www-form-urlencoded;charset="+charset);
method.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, charset);
//请求信息封装
NameValuePair[] data = new NameValuePair[param.size()];
Iterator<Entry<String, String>> iter = param.entrySet().iterator();
int i=0;
while(iter.hasNext()){
Entry<String, String> entry = iter.next();
data[i] = new NameValuePair(entry.getKey(), entry.getValue());
i++;
}
if(type.equals(GET)){
method.setQueryString(data);
}else{
PostMethod postMethod = (PostMethod)method;
postMethod.setRequestBody(data);
}
httpClient.executeMethod(method);
String submitResult = IOUtils.toString(method.getResponseBodyAsStream(), charset);
return submitResult;
} catch (Exception e) {
log.error(getRequestParam(url,param), e);
}
return null;
}
/**
* 拼装请求参数信息
*/
private static String getRequestParam(String url, Map<String,String> param){
Iterator<Entry<String, String>> iter = param.entrySet().iterator();
StringBuffer sb = new StringBuffer();
sb.append("HTTPClient请求URL地址:").append(url).append(",请求参数:");
sb.append("[");
while(iter.hasNext()){
Entry<String, String> entry = iter.next();
sb.append(entry.getKey()).append("=").append(entry.getValue());
if(iter.hasNext()){
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
}