当前位置:首页 > 开发 > 编程语言 > 数据库连接池 > 正文

httpclient4.x 使用连接池发送https请求使用总结

发表于: 2015-05-14   作者:bsr1983   来源:转载   浏览次数:
摘要:     由于项目中需要用httpclient进行内部服务请求处理,但之前没有是用httpclient中提供的连接池,而是自己封装的一个类似池的结构,一段时间后产生了性能问题,转而尝试通过是用httpclient内部的池进行处理,而且需要支持https的连接。      所使用的httpclient的版本为4.4.1,一共用到了三个jar:htt
    由于项目中需要用httpclient进行内部服务请求处理,但之前没有是用httpclient中提供的连接池,而是自己封装的一个类似池的结构,一段时间后产生了性能问题,转而尝试通过是用httpclient内部的池进行处理,而且需要支持https的连接。
     所使用的httpclient的版本为4.4.1,一共用到了三个jar:httpclient-4.4.1.jar、httpclient-cache-4.4.1.jar、httpcore-4.4.1.jar。
    所使用的连接池管理器的类为PoolingHttpClientConnectionManager,但httpclient部分参数,包括池的大小,最大路由,缓存,超时这些参数还未做深入研究;
     上代码:
      
  初始化代码:
     public void init()
 {
   try {
   //需要通过以下代码声明对https连接支持
   SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(null,
                   new TrustSelfSignedStrategy())
           .build();
   HostnameVerifier hostnameVerifier = SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
   SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
           sslcontext,hostnameVerifier);
   Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
           .register("http", PlainConnectionSocketFactory.getSocketFactory())
           .register("https", sslsf)
           .build();
   //初始化连接管理器
   poolConnManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
   // Increase max total connection to 200
   poolConnManager.setMaxTotal(maxTotalPool);
   // Increase default max connection per route to 20
   poolConnManager.setDefaultMaxPerRoute(maxConPerRoute);
  } catch (KeyManagementException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (NoSuchAlgorithmException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (KeyStoreException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
//获取连接
 public CloseableHttpClient getConnection()
 {
      CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(poolConnManager).build(); 
      return httpClient;
 }
//发送请求 url为请求url,jsonstr为请求参数
public String post(String url, String jsonStr)
 {
  String returnStr = null;
  //参数检测
  if(url==null||"".equals(url))
  {
   return returnStr;
  }
  try {
   HttpPost httpPost = new HttpPost(url);
   List <NameValuePair> nvps = new ArrayList <NameValuePair>();
   //设置post参数对
   nvps.add(new BasicNameValuePair("jsonstr", jsonStr));
   //设置编码,如果包含中文,一定要进行设置,否则按照系统默认字符集进行转码会出现乱码
   httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
   CloseableHttpResponse response = client.execute(httpPost);
   //获取响应状态码
   int status = response.getStatusLine().getStatusCode();
            if (status >= 200 && status < 300) {
                HttpEntity entity = response.getEntity();
                return entity != null ? EntityUtils.toString(entity,"utf-8") : null;
            } else {
                throw new ClientProtocolException("Unexpected response status: " + status);
            }
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (ClientProtocolException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  //相应返回值
  return returnStr;
 }
 

httpclient4.x 使用连接池发送https请求使用总结

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
修改配置使fiddler可以查看https请求 首先点击菜单栏Tools>>>Fiddler Options>>>
使用Fiddler发送POST请求 在测试过程中,有时会遇到需要修改请求中带的参数,去验证权限的安全问题
佟强 http://blog.csdn.net/microtong OakCMS内容管理系统 http://www.oakcms.cn http://www.oakcms
http 使用curl发起https请求 今天一个同事反映,使用curl发起https请求的时候报错:“SSL certifica
1、客户端代码 <html> <head> <script> var callbackFunction = function(data){
java使用jpcap抓包工具获得本机发送的所有tcp请求,根据tcp请求的内容可以调试某个应用启动后对外发
java使用jpcap抓包工具获得本机发送的所有tcp请求,根据tcp请求的内容可以调试某个应用启动后对外发
test.vbs文件代码如下图: 1 ScriptTimeout = 120 2 function getHTTPPage(url) 3 on error resume
在android应用程序中,可以使用HttpURLConnection发送HTTP请求。详见如下实例 1、activity_main.xml
最近使用Google Alert,然后就想自己做点东西,结果悲剧的发现Google Alert居然没有提供API给开发者直
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号