废话不多说,直接上代码
import java.io.ioexception;
import java.io.unsupportedencodingexception;
import java.net.urisyntaxexception;
import java.util.arraylist;
import java.util.map;
import org.apache.commons.logging.log;
import org.apache.commons.logging.logfactory;
import org.apache.http.httpentity;
import org.apache.http.namevaluepair;
import org.apache.http.client.clientprotocolexception;
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.client.methods.httprequestbase;
import org.apache.http.client.utils.uribuilder;
import org.apache.http.entity.stringentity;
import org.apache.http.impl.client.closeablehttpclient;
import org.apache.http.impl.client.httpclients;
import org.apache.http.impl.conn.poolinghttpclientconnectionmanager;
import org.apache.http.message.basicnamevaluepair;
import org.apache.http.util.entityutils;
import com.pingan.qhcs.map.audit.constant.codeconstant;
import com.pingan.qhcs.map.audit.exception.mapexception;
public class httpclientutil {
protected static log logger = logfactory.getlog(httpclientutil.class);
private static poolinghttpclientconnectionmanager cm;
private static string empty_str = "";
private static string utf_8 = "utf-8";
private static void init() {
if (cm == null) {
cm = new poolinghttpclientconnectionmanager();
cm.setmaxtotal(50);// 整个连接池最大连接数
cm.setdefaultmaxperroute(5);// 每路由最大连接数,默认值是2
}
}
/**
* 通过连接池获取httpclient
*
* @return
*/
public static closeablehttpclient gethttpclient() {
init();
return httpclients.custom().setconnectionmanager(cm).build();
}
public static string httpgetrequest(string url) {
httpget httpget = new httpget(url);
return getresult(httpget);
}
public static string httpgetrequest(string url, map params) throws urisyntaxexception {
uribuilder ub = new uribuilder();
ub.setpath(url);
arraylist pairs = covertparams2nvps(params);
ub.setparameters(pairs);
httpget httpget = new httpget(ub.build());
return getresult(httpget);
}
public static string httpgetrequest(string url, map headers, map params)
throws urisyntaxexception {
uribuilder ub = new uribuilder();
ub.setpath(url);
arraylist pairs = covertparams2nvps(params);
ub.setparameters(pairs);
httpget httpget = new httpget(ub.build());
for (map.entry param : headers.entryset()) {
httpget.addheader(param.getkey(), string.valueof(param.getvalue()));
}
return getresult(httpget);
}
public static string httppostrequest(string url) {
httppost httppost = new httppost(url);
return getresult(httppost);
}
public static string httppostrequest(string url, map params) throws unsupportedencodingexception {
httppost httppost = new httppost(url);
arraylist pairs = covertparams2nvps(params);
httppost.setentity(new urlencodedformentity(pairs, utf_8));
return getresult(httppost);
}
public static string httppostrequest(string url, map headers, map params)
throws unsupportedencodingexception {
httppost httppost = new httppost(url);
for (map.entry param : headers.entryset()) {
httppost.addheader(param.getkey(), string.valueof(param.getvalue()));
}
arraylist pairs = covertparams2nvps(params);
httppost.setentity(new urlencodedformentity(pairs, utf_8));
return getresult(httppost);
}
public static string httppostrequest(string url, map headers, string strbody)
throws exception {
httppost httppost = new httppost(url);
for (map.entry param : headers.entryset()) {
httppost.addheader(param.getkey(), string.valueof(param.getvalue()));
}
httppost.setentity(new stringentity(strbody, utf_8));
return getresult(httppost);
}
private static arraylist covertparams2nvps(map params) {
arraylist pairs = new arraylist();
for (map.entry param : params.entryset()) {
pairs.add(new basicnamevaluepair(param.getkey(), string.valueof(param.getvalue())));
}
return pairs;
}
/**
* 处理http请求
*
* setconnecttimeout:设置连接超时时间,单位毫秒。
* setconnectionrequesttimeout:设置从connect manager获取connection 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。
* setsockettimeout:请求获取数据的超时时间,单位毫秒。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。
*
* @param request
* @return
*/
private static string getresult(httprequestbase request) {
requestconfig requestconfig = requestconfig.custom().setconnecttimeout(60000)
.setconnectionrequesttimeout(5000).setsockettimeout(60000).build();
request.setconfig(requestconfig);// 设置请求和传输超时时间
// closeablehttpclient httpclient = httpclients.createdefault();
closeablehttpclient httpclient = gethttpclient();
try {
closeablehttpresponse response = httpclient.execute(request); //执行请求
// response.getstatusline().getstatuscode();
httpentity entity = response.getentity();
if (entity != null) {
// long len = entity.getcontentlength();// -1 表示长度未知
string result = entityutils.tostring(entity);
response.close();
// httpclient.close();
return result;
}
} catch (clientprotocolexception e) {
logger.error("[maperror] httpclientutil clientprotocolexception : " + e.getmessage());
throw new mapexception(codeconstant.code_connect_fail, "httpclientutil clientprotocolexception :" + e.getmessage());
} catch (ioexception e) {
logger.error("[maperror] httpclientutil ioexception : " + e.getmessage());
throw new mapexception(codeconstant.code_connect_fail, "httpclientutil ioexception :" + e.getmessage());
} finally {
}
return empty_str;
}
}
以上这篇httputils 发送http请求工具类(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!