package
com.ryx.util;
import
java.util.ArrayList;
import
java.util.List;
import
java.util.Map;
import
org.apache.commons.lang.StringUtils;
import
org.apache.http.HttpEntity;
import
org.apache.http.NameValuePair;
import
org.apache.http.client.config.RequestConfig;
import
org.apache.http.client.entity.UrlEncodedFormEntity;
import
org.apache.http.client.methods.CloseableHttpResponse;
import
org.apache.http.client.methods.HttpGet;
import
org.apache.http.client.methods.HttpPost;
import
org.apache.http.impl.client.CloseableHttpClient;
import
org.apache.http.impl.client.HttpClientBuilder;
import
org.apache.http.message.BasicNameValuePair;
import
org.apache.http.util.EntityUtils;
/**
* 基于 httpclient 4.3.1版本的 http工具类
* @author mcSui
*
*/
public
class
HttpTookit {
private
static
final
CloseableHttpClient httpClient;
public
static
final
String CHARSET =
"UTF-8"
;
static
{
RequestConfig config = RequestConfig.custom().setConnectTimeout(
60000
).setSocketTimeout(
15000
).build();
httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build();
}
public
static
String doGet(String url, Map<String, String> params){
return
doGet(url, params,CHARSET);
}
public
static
String doPost(String url, Map<String, String> params){
return
doPost(url, params,CHARSET);
}
/**
* HTTP Get 获取内容
* @param url 请求的url地址 ?之前的地址
* @param params
请求的参数
* @param charset
编码格式
* @return
页面内容
*/
public
static
String doGet(String url,Map<String,String> params,String charset){
if
(StringUtils.isBlank(url)){
return
null
;
}
try
{
if
(params !=
null
&& !params.isEmpty()){
List<NameValuePair> pairs =
new
ArrayList<NameValuePair>(params.size());
for
(Map.Entry<String,String> entry : params.entrySet()){
String value = entry.getValue();
if
(value !=
null
){
pairs.add(
new
BasicNameValuePair(entry.getKey(),value));
}
}
url +=
"?"
+ EntityUtils.toString(
new
UrlEncodedFormEntity(pairs, charset));
}
HttpGet httpGet =
new
HttpGet(url);
CloseableHttpResponse response = httpClient.execute(httpGet);
int
statusCode = response.getStatusLine().getStatusCode();
if
(statusCode !=
200
) {
httpGet.abort();
throw
new
RuntimeException(
"HttpClient,error status code :"
+ statusCode);
}
HttpEntity entity = response.getEntity();
String result =
null
;
if
(entity !=
null
){
result = EntityUtils.toString(entity,
"utf-8"
);
}
EntityUtils.consume(entity);
response.close();
return
result;
}
catch
(Exception e) {
e.printStackTrace();
}
return
null
;
}
/**
* HTTP Post 获取内容
* @param url 请求的url地址 ?之前的地址
* @param params
请求的参数
* @param charset
编码格式
* @return
页面内容
*/
public
static
String doPost(String url,Map<String,String> params,String charset){
if
(StringUtils.isBlank(url)){
return
null
;
}
try
{
List<NameValuePair> pairs =
null
;
if
(params !=
null
&& !params.isEmpty()){
pairs =
new
ArrayList<NameValuePair>(params.size());
for
(Map.Entry<String,String> entry : params.entrySet()){
String value = entry.getValue();
if
(value !=
null
){
pairs.add(
new
BasicNameValuePair(entry.getKey(),value));
}
}
}
HttpPost httpPost =
new
HttpPost(url);
if
(pairs !=
null
&& pairs.size() >
0
){
httpPost.setEntity(
new
UrlEncodedFormEntity(pairs,CHARSET));
}
CloseableHttpResponse response = httpClient.execute(httpPost);
int
statusCode = response.getStatusLine().getStatusCode();
if
(statusCode !=
200
) {
httpPost.abort();
throw
new
RuntimeException(
"HttpClient,error status code :"
+ statusCode);
}
HttpEntity entity = response.getEntity();
String result =
null
;
if
(entity !=
null
){
result = EntityUtils.toString(entity,
"utf-8"
);
}
EntityUtils.consume(entity);
response.close();
return
result;
}
catch
(Exception e) {
e.printStackTrace();
}
return
null
;
}
public
static
void
main(String []args){
String getData = doGet(
"http://www.oschina.net/"
,
null
);
System.out.println(getData);
System.out.println(
"----------------------分割线-----------------------"
);
String postData = doPost(
"http://www.oschina.net/"
,
null
);
System.out.println(postData);
}
}
ps:最新的httpclientjar包现在:http://hc.apache.org/downloads.cgi