使用HttpClient4.5 PoolingHttpClientConnectionManager 提交Http请求
来源:互联网 发布:淘宝生活研究所是什么 编辑:程序博客网 时间:2024/06/05 02:21
使用连接池的好处
大家都知道http连接是基于tcp的,而tcp创建连接需要三次握手,断开连接四次挥手,如果我们不使用连接池,那么每发出一个请求,就需要三次握手和四次挥手,而三次握手和四次挥手都是耗资源的操作。试想如果频繁的发出请求,性能是不是会是个瓶颈。所以HttpClient在4之后就出现了连接池的概念,当请求结束并不是直接断开连接,而是返回给连接池方便下次调用。
代码示例
private static PoolingHttpClientConnectionManager clientConnectionManager=null; private static CloseableHttpClient httpClient=null; private static RequestConfig config = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD_STRICT).build(); private final static Object syncLock = new Object(); /** * 创建httpclient连接池并初始化 */ @PostConstruct private void init(){ Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() .register("https", SSLConnectionSocketFactory.getSocketFactory()) .register("http", PlainConnectionSocketFactory.getSocketFactory()) .build(); clientConnectionManager =new PoolingHttpClientConnectionManager(socketFactoryRegistry); clientConnectionManager.setMaxTotal(50); clientConnectionManager.setDefaultMaxPerRoute(25); } public static CloseableHttpClient getHttpClient(){ if(httpClient == null){ synchronized (syncLock){ if(httpClient == null){ CookieStore cookieStore = new BasicCookieStore(); BasicClientCookie cookie = new BasicClientCookie("sessionID", "######"); cookie.setDomain("#####"); cookie.setPath("/"); cookieStore.addCookie(cookie); httpClient =HttpClients.custom().setConnectionManager(clientConnectionManager).setDefaultCookieStore(cookieStore).setDefaultRequestConfig(config).build(); } } } } return httpClient; } /** * get请求 * @param url * @param headers * @return */ public static HttpEntity httpGet(String url, Map<String,Object> headers){ CloseableHttpClient httpClient = getHttpClient(); HttpRequest httpGet = new HttpGet(url); if(headers!=null&&!headers.isEmpty()){ httpGet = setHeaders(headers, httpGet); } CloseableHttpResponse response = null; try{ response =httpClient.execute((HttpGet)httpGet); HttpEntity entity = response.getEntity(); return entity; }catch (Exception e){ e.printStackTrace(); } return null; } /** * post请求,使用json格式传参 * @param url * @param headers * @param data * @return */ public static HttpEntity httpPost(String url,Map<String,Object> headers,String data){ CloseableHttpClient httpClient = getHttpClient(); HttpRequest request = new HttpPost(url); if(headers!=null&&!headers.isEmpty()){ request = setHeaders(headers,request); } CloseableHttpResponse response = null; try { HttpPost httpPost = (HttpPost) request; httpPost.setEntity(new StringEntity(data, ContentType.create("application/json", "UTF-8"))); response=httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); return entity; } catch (IOException e) { e.printStackTrace(); } return null; } /** 使用表单键值对传参 */ public static HttpEntity PostForm(String url,Map<String,Object> headers,List<NameValuePair> data){ CloseableHttpClient httpClient = getHttpClient(); HttpRequest request = new HttpPost(url); if(headers!=null&&!headers.isEmpty()){ request = setHeaders(headers,request); } CloseableHttpResponse response = null; UrlEncodedFormEntity uefEntity; try { HttpPost httpPost = (HttpPost) request; uefEntity = new UrlEncodedFormEntity(data,"UTF-8"); httpPost.setEntity(uefEntity); // httpPost.setEntity(new StringEntity(data, ContentType.create("application/json", "UTF-8"))); response=httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); return entity; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 设置请求头信息 * @param headers * @param request * @return */ private static HttpRequest setHeaders(Map<String,Object> headers, HttpRequest request) { for (Map.Entry entry : headers.entrySet()) { if (!entry.getKey().equals("Cookie")) { request.addHeader((String) entry.getKey(), (String) entry.getValue()); } else { Map<String, Object> Cookies = (Map<String, Object>) entry.getValue(); for (Map.Entry entry1 : Cookies.entrySet()) { request.addHeader(new BasicHeader("Cookie", (String) entry1.getValue())); } } } return request; } public static Map<String,String> getCookie(String url){ CloseableHttpClient httpClient = getHttpClient(); HttpRequest httpGet = new HttpGet(url); CloseableHttpResponse response = null; try{ response =httpClient.execute((HttpGet)httpGet); Header[] headers = response.getAllHeaders(); Map<String,String> cookies=new HashMap<String, String>(); for(Header header:headers){ cookies.put(header.getName(),header.getValue()); } return cookies; }catch (Exception e){ e.printStackTrace(); } return null; }
0 0
- 使用HttpClient4.5 PoolingHttpClientConnectionManager 提交Http请求
- 使用HttpClient的PoolingHttpClientConnectionManager实现Http请求连接池
- Http请求连接池 - HttpClient 的 PoolingHttpClientConnectionManager
- 使用HttpClient4.4 模拟http请求
- HttpClient4.5 使用http连接池发送http请求深度示例
- HttpClient4.5 使用http连接池发送http请求深度示例
- HttpClient4之模拟http请求
- httpclient4 post提交请求乱码问题解决
- httpclient4 post提交请求乱码问题解决
- httpclient4.4 http摘要认证请求
- C#使用post提交http请求
- 使用HttpClient4.3.1模拟Http请求与无信任证书访问Https
- HttpClient4.5发送post请求
- HTTP请求提交方式
- 用httpclient4.x 发送http get post请求。
- 用httpclient4.x 发送http get post请求。
- httpclient4 发送http请求的get和post用法
- 基于HttpClient4.3实现的Http后台请求
- Android时间控件TimePicker使用
- Git官网下载windows版本慢的问题
- ionic中$ionicView 事件的执行顺序
- Java类收集
- Java语言二进制补码与数据类型
- 使用HttpClient4.5 PoolingHttpClientConnectionManager 提交Http请求
- 命名空间_学习过程_1
- CodeFroces 363 div2 A. Launch of Collider(水题不水/(ㄒoㄒ)/~~)
- 仿天猫App实现商品列表布局切换效果
- 最靠谱的禁止ViewPager滑动方法
- Qt 5.7.0 编译出现cannot find -lGL问题
- java操作LogBack(maven项目)
- hdu 1421 搬寝室
- java web开发(二) 8款必备的免费移动Web开发框架(HTML5/JS)