HTTP请求工具类,可以帮你在程序后台默默完成POST、GET请求,使用方法参见注释,上代码:
?
class="java">/**
* HttpUtil.java
* Copyright ? 2012 窦海宁
* All right reserved
*/
package org.aiyu.core.common.util;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
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.lang.StringUtils;
/**
* <p>Http工具类
*
* <p>Http工具类,为系统提供通用Http访问操作方法:
* <p>
* <p>1、发送GET请求;
* <p>2、发送POST请求。
*
* @author 窦海宁, chong0660@sina.com
* @since AiyuCommonCore-0.1
* @version AiyuCommonCore-0.1
*/
@SuppressWarnings("unchecked")
public class HttpUtil {
/**
* <p>发送GET请求
*
* @param url GET请求地址
*
* @return 与当前请求对应的响应内容字节数组
*
* @modify 窦海宁, 2012-03-19
*/
public static byte[] doGet(String url) {
return HttpUtil.doGet(url , null , null , 0);
}
/**
* <p>发送GET请求
*
* @param url GET请求地址
* @param headerMap GET请求头参数容器
*
* @return 与当前请求对应的响应内容字节数组
*
* @modify 窦海宁, 2012-03-19
*/
public static byte[] doGet(String url , Map headerMap) {
return HttpUtil.doGet(url , headerMap , null , 0);
}
/**
* <p>发送GET请求
*
* @param url GET请求地址
* @param proxyUrl 代理服务器地址
* @param proxyPort 代理服务器端口号
*
* @return 与当前请求对应的响应内容字节数组
*
* @modify 窦海宁, 2012-03-19
*/
public static byte[] doGet(String url , String proxyUrl , int proxyPort) {
return HttpUtil.doGet(url , null , proxyUrl , proxyPort);
}
/**
* <p>发送GET请求
*
* @param url GET请求地址
* @param headerMap GET请求头参数容器
* @param proxyUrl 代理服务器地址
* @param proxyPort 代理服务器端口号
*
* @return 与当前请求对应的响应内容字节数组
*
* @modify 窦海宁, 2012-03-19
*/
public static byte[] doGet(String url , Map headerMap , String proxyUrl , int proxyPort) {
byte[] content = null;
HttpClient httpClient = new HttpClient();
GetMethod getMethod = new GetMethod(url);
if (headerMap != null) {
//头部请求信息
if (headerMap != null) {
Iterator iterator = headerMap.entrySet().iterator();
while (iterator.hasNext()) {
Entry entry = (Entry) iterator.next();
getMethod.addRequestHeader(entry.getKey().toString() , entry.getValue().toString());
}
}
}
if (StringUtils.isNotBlank(proxyUrl)) {
httpClient.getHostConfiguration().setProxy(proxyUrl , proxyPort);
}
//设置成了默认的恢复策略,在发生异常时候将自动重试3次,在这里你也可以设置成自定义的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT , 10000);
//postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER , new DefaultHttpMethodRetryHandler());
InputStream inputStream = null;
try {
if (httpClient.executeMethod(getMethod) == HttpStatus.SC_OK) {
//读取内容
inputStream = getMethod.getResponseBodyAsStream();
content = IOUtils.toByteArray(inputStream);
} else {
System.err.println("Method failed: " + getMethod.getStatusLine());
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
IOUtils.closeQuietly(inputStream);
getMethod.releaseConnection();
}
return content;
}
/**
* <p>发送POST请求
*
* @param url POST请求地址
* @param parameterMap POST请求参数容器
*
* @return 与当前请求对应的响应内容字节数组
*
* @modify 窦海宁, 2012-05-21
*/
public static byte[] doPost(String url , Map parameterMap) {
return HttpUtil.doPost(url , null , parameterMap , null , null , 0);
}
/**
* <p>发送POST请求
*
* @param url POST请求地址
* @param parameterMap POST请求参数容器
* @param paramCharset 参数字符集名称
*
* @return 与当前请求对应的响应内容字节数组
*
* @modify 窦海宁, 2012-05-21
*/
public static byte[] doPost(String url , Map parameterMap , String paramCharset) {
return HttpUtil.doPost(url , null , parameterMap , paramCharset , null , 0);
}
/**
* <p>发送POST请求
*
* @param url POST请求地址
* @param headerMap POST请求头参数容器
* @param parameterMap POST请求参数容器
* @param paramCharset 参数字符集名称
*
* @return 与当前请求对应的响应内容字节数组
*
* @modify 窦海宁, 2012-05-21
*/
public static byte[] doPost(String url , Map headerMap , Map parameterMap , String paramCharset) {
return HttpUtil.doPost(url , headerMap , parameterMap , paramCharset , null , 0);
}
/**
* <p>发送POST请求
*
* @param url POST请求地址
* @param parameterMap POST请求参数容器
* @param paramCharset 参数字符集名称
* @param proxyUrl 代理服务器地址
* @param proxyPort 代理服务器端口号
*
* @return 与当前请求对应的响应内容字节数组
*
* @modify 窦海宁, 2012-05-21
*/
public static byte[] doPost(String url , Map parameterMap , String paramCharset , String proxyUrl , int proxyPort) {
return HttpUtil.doPost(url , null , parameterMap , paramCharset , proxyUrl , proxyPort);
}
/**
* <p>发送POST请求
*
* @param url POST请求地址
* @param headerMap POST请求头参数容器
* @param parameterMap POST请求参数容器
* @param paramCharset 参数字符集名称
* @param proxyUrl 代理服务器地址
* @param proxyPort 代理服务器端口号
*
* @return 与当前请求对应的响应内容字节数组
*
* @modify 窦海宁, 2012-05-21
*/
public static byte[] doPost(String url , Map headerMap , Map parameterMap , String paramCharset , String proxyUrl , int proxyPort) {
byte[] content = null;
HttpClient httpClient = new HttpClient();
PostMethod postMethod = new PostMethod(url);
if (StringUtils.isNotBlank(paramCharset)) {
postMethod.getParams().setContentCharset(paramCharset);
postMethod.getParams().setHttpElementCharset(paramCharset);
}
if (headerMap != null) {
//头部请求信息
if (headerMap != null) {
Iterator iterator = headerMap.entrySet().iterator();
while (iterator.hasNext()) {
Entry entry = (Entry) iterator.next();
postMethod.addRequestHeader(entry.getKey().toString() , entry.getValue().toString());
}
}
}
Iterator iterator = parameterMap.keySet().iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
postMethod.addParameter(key , (String) parameterMap.get(key));
}
if (StringUtils.isNotBlank(proxyUrl)) {
httpClient.getHostConfiguration().setProxy(proxyUrl , proxyPort);
}
//设置成了默认的恢复策略,在发生异常时候将自动重试3次,在这里你也可以设置成自定义的恢复策略
postMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT , 10000);
//postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER , new DefaultHttpMethodRetryHandler());
InputStream inputStream = null;
try {
if (httpClient.executeMethod(postMethod) == HttpStatus.SC_OK) {
//读取内容
inputStream = postMethod.getResponseBodyAsStream();
content = IOUtils.toByteArray(inputStream);
} else {
System.err.println("Method failed: " + postMethod.getStatusLine());
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
IOUtils.closeQuietly(inputStream);
postMethod.releaseConnection();
}
return content;
}
}
?
您好,我是窦海宁,现在是一名免费开源工具研发人员,如果您喜欢我的开源代码,如果您希望我更好的发展下去,为您提供更多更好的开源代码……在这里感谢您的捐助。
?
捐助地址:https://me.alipay.com/chong0660