package com.base.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
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.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;
public class HttpUtil {
/**
* <p>发送GET请求
* @param url GET请求地址
* @return 与当前请求对应的响应内容字节数组
*
*/
public static String doGet(String url) {
return HttpUtil.doGet(url , null , null , 0,"utf-8");
}
/**
* <p>发送GET请求
* @param url GET请求地址
* @param headerMap GET请求头参数容器
* @return 与当前请求对应的响应内容字节数组
*/
public static String doGet(String url , Map<String,String> headerMap, String charset) {
return HttpUtil.doGet(url , headerMap , null , 0, charset);
}
/**
* <p>发送GET请求
* @param url GET请求地址
* @param proxyUrl 代理服务器地址
* @param proxyPort 代理服务器端口号
* @return 与当前请求对应的响应内容字节数组
*/
public static String doGet(String url , String proxyUrl , int proxyPort, String charset) {
return HttpUtil.doGet(url , null , proxyUrl , proxyPort, charset);
}
/**
* <p>发送GET请求
*
* @param url GET请求地址
* @param headerMap GET请求头参数容器
* @param proxyUrl 代理服务器地址
* @param proxyPort 代理服务器端口号
* @return 与当前请求对应的响应内容字节数组
*/
public static String doGet(String url , Map<String,String> headerMap , String proxyUrl , int proxyPort, String charset) {
//byte[] content = null;
HttpClient httpClient = new HttpClient();
GetMethod getMethod = new GetMethod(url);
getMethod.addRequestHeader("Content-type", "text/html; charset="+charset);
//头部请求信息
if (headerMap != null) {
Iterator<Entry<String, String>> iterator = headerMap.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String,String> entry = (Entry<String,String>) 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);
//content = getMethod.getResponseBodyAsString().getBytes(charset);
InputStream ins = getMethod.getResponseBodyAsStream();
//按指定的字符集构建文件流
BufferedReader br = new BufferedReader(new InputStreamReader(ins,charset));
StringBuilder sbf = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null)
{
sbf.append(line);
}
br.close();
return sbf.toString();
} else {
System.err.println("Method failed: " + getMethod.getStatusLine());
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
IOUtils.closeQuietly(inputStream);
getMethod.releaseConnection();
}
return "";
}
/**
* <p>发送POST请求
* @param url POST请求地址
* @param parameterMap POST请求参数容器
* @return 与当前请求对应的响应内容字节数组
*
*/
public static byte[] doPost(String url , Map<String,String> parameterMap) {
return HttpUtil.doPost(url , null , parameterMap , null , null , 0);
}
/**
* <p>发送POST请求
*
* @param url POST请求地址
* @param parameterMap POST请求参数容器
* @param paramCharset 参数字符集名称
* @return 与当前请求对应的响应内容字节数组
*/
public static byte[] doPost(String url , Map<String,String> 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 与当前请求对应的响应内容字节数组
*/
public static byte[] doPost(String url , Map<String,String> headerMap , Map<String,String> 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 与当前请求对应的响应内容字节数组
*
*/
public static byte[] doPost(String url , Map<String,String> 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 与当前请求对应的响应内容字节数组
*/
public static byte[] doPost(String url , Map<String,String> headerMap , Map<String,String> 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<Entry<String, String>> iterator = headerMap.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String,String> entry = (Entry<String,String>) iterator.next();
postMethod.addRequestHeader(entry.getKey().toString() , entry.getValue().toString());
}
}
}
if (parameterMap!=null) {
Iterator<String> 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;
}
public static void main(String[] args) {
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
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.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;
public class HttpUtil {
/**
* <p>发送GET请求
* @param url GET请求地址
* @return 与当前请求对应的响应内容字节数组
*
*/
public static String doGet(String url) {
return HttpUtil.doGet(url , null , null , 0,"utf-8");
}
/**
* <p>发送GET请求
* @param url GET请求地址
* @param headerMap GET请求头参数容器
* @return 与当前请求对应的响应内容字节数组
*/
public static String doGet(String url , Map<String,String> headerMap, String charset) {
return HttpUtil.doGet(url , headerMap , null , 0, charset);
}
/**
* <p>发送GET请求
* @param url GET请求地址
* @param proxyUrl 代理服务器地址
* @param proxyPort 代理服务器端口号
* @return 与当前请求对应的响应内容字节数组
*/
public static String doGet(String url , String proxyUrl , int proxyPort, String charset) {
return HttpUtil.doGet(url , null , proxyUrl , proxyPort, charset);
}
/**
* <p>发送GET请求
*
* @param url GET请求地址
* @param headerMap GET请求头参数容器
* @param proxyUrl 代理服务器地址
* @param proxyPort 代理服务器端口号
* @return 与当前请求对应的响应内容字节数组
*/
public static String doGet(String url , Map<String,String> headerMap , String proxyUrl , int proxyPort, String charset) {
//byte[] content = null;
HttpClient httpClient = new HttpClient();
GetMethod getMethod = new GetMethod(url);
getMethod.addRequestHeader("Content-type", "text/html; charset="+charset);
//头部请求信息
if (headerMap != null) {
Iterator<Entry<String, String>> iterator = headerMap.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String,String> entry = (Entry<String,String>) 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);
//content = getMethod.getResponseBodyAsString().getBytes(charset);
InputStream ins = getMethod.getResponseBodyAsStream();
//按指定的字符集构建文件流
BufferedReader br = new BufferedReader(new InputStreamReader(ins,charset));
StringBuilder sbf = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null)
{
sbf.append(line);
}
br.close();
return sbf.toString();
} else {
System.err.println("Method failed: " + getMethod.getStatusLine());
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
IOUtils.closeQuietly(inputStream);
getMethod.releaseConnection();
}
return "";
}
/**
* <p>发送POST请求
* @param url POST请求地址
* @param parameterMap POST请求参数容器
* @return 与当前请求对应的响应内容字节数组
*
*/
public static byte[] doPost(String url , Map<String,String> parameterMap) {
return HttpUtil.doPost(url , null , parameterMap , null , null , 0);
}
/**
* <p>发送POST请求
*
* @param url POST请求地址
* @param parameterMap POST请求参数容器
* @param paramCharset 参数字符集名称
* @return 与当前请求对应的响应内容字节数组
*/
public static byte[] doPost(String url , Map<String,String> 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 与当前请求对应的响应内容字节数组
*/
public static byte[] doPost(String url , Map<String,String> headerMap , Map<String,String> 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 与当前请求对应的响应内容字节数组
*
*/
public static byte[] doPost(String url , Map<String,String> 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 与当前请求对应的响应内容字节数组
*/
public static byte[] doPost(String url , Map<String,String> headerMap , Map<String,String> 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<Entry<String, String>> iterator = headerMap.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String,String> entry = (Entry<String,String>) iterator.next();
postMethod.addRequestHeader(entry.getKey().toString() , entry.getValue().toString());
}
}
}
if (parameterMap!=null) {
Iterator<String> 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;
}
public static void main(String[] args) {
}
}