同步httpclient
当客户端请求数量不是非常大,请求Response RT时间在能接受范围时,这种方式更适合。
public class SyncHttpClients {
private static Logger logger = Logger.getLogger(HttpClientUtil.class);
private final static String DEFAULT_CHARSETNAME = "UTF-8";
private final static int DEFAULT_TIMEOUT = 5000;
private static MultiThreadedHttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
static {
httpConnectionManager.getParams().setDefaultMaxConnectionsPerHost(3);
httpConnectionManager.getParams().setMaxTotalConnections(30);
httpConnectionManager.getParams().setConnectionTimeout(3000);
httpConnectionManager.getParams().setSoTimeout(5000);
httpConnectionManager.getParams().setTcpNoDelay(true);
httpConnectionManager.getParams().setStaleCheckingEnabled(false);
httpConnectionManager.getParams().setLinger(1);
httpConnectionManager.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler(1, false));
Protocol myhttps = new Protocol("https", new HTTPSSecureProtocolSocketFactory(), 443);
Protocol.registerProtocol("https", myhttps);
}
/**
* 根据url获取ResponseBody,method=get
* @param url exp:http://192.168.1.1/api.do
* @param charsetName 默认使用UTF-8编码
* @return 以String的方式返回
* @throws UnsupportedEncodingException
*/
public static String getDataAsStringFromUrl(String url, String charsetName) {
return getDataAsStringFromUrl(url, charsetName, DEFAULT_TIMEOUT);
}
public static String getDataAsStringFromUrl(String url) {
return getDataAsStringFromUrl(url, null, DEFAULT_TIMEOUT);
}
public static String getDataAsStringFromUrl(String url, int timeout) {
return getDataAsStringFromUrl(url, null, timeout);
}
/**
* 根据url获取ResponseBody,method=get
* @param url exp:http://192.168.1.1/api.do
* @return 以byte[]的方式放回
*/
private static byte[] getDataFromUrl(String url, int timeout) {
if (StringUtils.isBlank(url)) {
logger.error("url is blank!");
return null;
}
HttpClient httpClient = new HttpClient(httpConnectionManager);
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(3000);
http