{"id":27,"date":"2015-04-17T15:57:33","date_gmt":"2015-04-17T07:57:33","guid":{"rendered":"http:\/\/www.anthonylee.cn\/myblog\/?p=27"},"modified":"2018-03-08T16:15:17","modified_gmt":"2018-03-08T08:15:17","slug":"%e4%bd%bf%e7%94%a8httpclient4-4%e5%8f%91%e9%80%81%e8%af%b7%e6%b1%82","status":"publish","type":"post","link":"http:\/\/www.anthonylee.cn\/myblog\/?p=27","title":{"rendered":"\u4f7f\u7528httpclient4.4\u53d1\u9001\u8bf7\u6c42"},"content":{"rendered":"<p>\u5bf9httpclient4.4\u8fdb\u884c\u5c01\u88c5<\/p>\n<p>1.httpclient\u5355\u4f8b\u6a21\u5f0f<\/p>\n<p>2.\u8bf7\u6c42\u5f02\u5e38\u91cd\u8bd5\u4e09\u6b21<\/p>\n<p>3.\u652f\u6301get\u548cpost<\/p>\n<p>4.Constant.REQUEST_TIMEOUT\u7b49\u4e3a\u6570\u5b57\u5e38\u91cf\uff0c\u53ef\u4ee5\u81ea\u884c\u6307\u5b9a<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\n\r\nimport java.io.IOException;\r\n\r\nimport org.apache.http.HttpEntity;\r\nimport org.apache.http.HttpResponse;\r\nimport org.apache.http.client.ClientProtocolException;\r\nimport org.apache.http.client.config.RequestConfig;\r\nimport org.apache.http.client.methods.CloseableHttpResponse;\r\nimport org.apache.http.client.methods.HttpGet;\r\nimport org.apache.http.client.methods.HttpUriRequest;\r\nimport org.apache.http.entity.BufferedHttpEntity;\r\nimport org.apache.http.impl.client.CloseableHttpClient;\r\nimport org.apache.http.impl.client.HttpClients;\r\nimport org.apache.http.impl.conn.PoolingHttpClientConnectionManager;\r\nimport org.apache.http.util.EntityUtils;\r\n\r\npublic class HttpEngine {\r\nprivate CloseableHttpClient httpClient = null;\r\n\/\u00a0\u5355\u4f8b\u6a21\u5f0f\u58f0\u660e\u5f00\u59cb\u00a0\/\r\n\/\/ \u7c7b\u521d\u59cb\u5316\u65f6\uff0c\u81ea\u884c\u5b9e\u4f8b\u5316\uff0c\u997f\u6c49\u5f0f\u5355\u4f8b\u6a21\u5f0f\r\nprivate static final HttpEngine httpEngine = new HttpEngine();\r\n\r\npublic static HttpEngine getHttpEngineInstance() {\r\nreturn httpEngine;\r\n}\r\n\r\nprivate HttpEngine() {\r\ninitHttpClient();\r\n}\r\n\r\nprivate void initHttpClient() {\r\n\/\/ \u521b\u5efahttpclient\u8fde\u63a5\u6c60\r\nPoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();\r\ncm.setMaxTotal(200); \/\/ \u8bbe\u7f6e\u8fde\u63a5\u6c60\u7ebf\u7a0b\u6700\u5927\u6570\u91cf\r\ncm.setDefaultMaxPerRoute(100); \/\/ \u8bbe\u7f6e\u5355\u4e2a\u8def\u7531\u6700\u5927\u7684\u8fde\u63a5\u7ebf\u7a0b\u6570\u91cf\r\n\/\/ \u521b\u5efahttp request\u7684\u914d\u7f6e\u4fe1\u606f\r\nRequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(Constant.REQUEST_TIMEOUT)\r\n.setConnectTimeout(Constant.REQUEST_TIMEOUT).setSocketTimeout(Constant.REQUEST_SOCKET_TIME).build();\r\n\/\/ \u8bbe\u7f6e\u91cd\u5b9a\u5411\u7b56\u7565\r\n\/\/ LaxRedirectStrategy redirectStrategy = new LaxRedirectStrategy();\r\n\/\/ \u521d\u59cb\u5316httpclient\u5ba2\u6237\u7aef\r\nhttpClient = HttpClients.custom().setConnectionManager(cm).setDefaultRequestConfig(requestConfig).build();\r\n}\r\n\r\npublic String execute(String url) {\r\nString result = &quot;&quot;;\r\nif (null == url || &quot;&quot;.equals(url)) {\r\nresult = &quot;&quot;;\r\n\/\/ \u5982\u679curl\u4e3a\u7a7a\u6216\u8005null\uff0c\u5219\u8fd4\u56desrc\u7a7a\u503c\u05b5\r\n} else {\r\n\/\/ \u521b\u5efahttpclient\u8bf7\u6c42\u65b9\u5f0f\r\nHttpGet httpGet = new HttpGet(url);\r\nCloseableHttpResponse response = null;\r\ntry {\r\nresponse = makeRequestWithRetries(httpGet);\r\nresult = parseResponse2String(response);\r\n} catch (IOException e) {\r\n\/\/ log\r\n} finally {\r\nif (null != response) {\r\ntry {\r\n\/\/ \u5173\u95edresponse\r\nresponse.close();\r\nhttpGet.abort();\r\n} catch (IOException e) {\r\n\/\/ TODO \u8fd9\u91cc\u5199\u5f02\u5e38\u5904\u7406\u7684\u4ee3\u7801\r\ne.printStackTrace();\r\n}\r\n}\r\n}\r\n}\r\nreturn result;\r\n}\r\n\r\npublic CloseableHttpResponse execute(HttpUriRequest request) throws IOException {\r\nCloseableHttpResponse response = null;\r\nif (null == request) {\r\nresponse = null;\r\n\/\/ \u5982\u679chttpPost\u4e3a\u7a7a\u6216\u8005null\uff0c\u5219\u8fd4\u56de\u7a7a\r\n} else {\r\n\/\/ \u521b\u5efahttpclient\u8bf7\u6c42\u65b9\u5f0f\r\nresponse = makeRequestWithRetries(request);\r\n}\r\nreturn response;\r\n}\r\n\r\n\/\/\u629b\u5f02\u5e38\u91cd\u8bd5\u4e09\u6b21\r\nprivate CloseableHttpResponse makeRequestWithRetries(HttpUriRequest request) {\r\nCloseableHttpResponse response = null;\r\nint retryCount = 0;\r\nwhile (retryCount++ &amp;lt; Constant.HTTP_MAX_RETRIES) {\r\ntry {\r\nreturn response = httpClient.execute(request);\r\n} catch (ClientProtocolException e) {\r\nSystem.out.println(&quot;RETRIES again &quot; + retryCount + &quot; in makeRequestWithRetries&amp;lt;request&amp;gt;: &quot;\r\n&lt;ul&gt;\r\n \t&lt;li&gt;e.getMessage());\r\ne.printStackTrace();&lt;\/li&gt;\r\n&lt;\/ul&gt;\r\n} catch (IOException e) {\r\nSystem.out.println(&quot;RETRIES again &quot; + retryCount + &quot; in makeRequestWithRetries&amp;lt;request&amp;gt;: &quot;\r\n&lt;ul&gt;\r\n \t&lt;li&gt;e.getMessage());\r\ne.printStackTrace();&lt;\/li&gt;\r\n&lt;\/ul&gt;\r\n}\r\n}\r\nreturn response;\r\n}\r\n\r\npublic static String parseResponse2String(HttpResponse response) throws IOException {\r\n\r\nString responseBody = &quot;&quot;;\r\n\r\nHttpEntity entity = null;\r\nHttpEntity temp = response.getEntity();\r\nif (temp != null) {\r\nentity = new BufferedHttpEntity(temp);\r\nresponseBody = EntityUtils.toString(entity);\r\n}\r\n\r\nreturn responseBody;\r\n\r\n}\r\n\r\n\/\/ public static void main(String args[]) throws IOException, ParseException\r\n\/\/ {\r\n\/\/ \/\/ \u4f7f\u7528\u65b9\u5f0f1\r\n\/\/ HttpEngine httpEngine = HttpEngine.getHttpEngineInstance();\r\n\/\/ String result =\r\n\/\/ httpEngine.execute(&quot;&lt;a href=&quot;http:\/\/www.baidu.com\/?param1=sfdsfsdfs&amp;amp;&quot;&gt;http:\/\/www.baidu.com?param1=sfdsfsdfs&amp;amp;&lt;\/a&gt;;param2=9897979789789&quot;);\r\n\/\/ System.out.println(result);\r\n\/\/\r\n\/\/ \/\/ \u4f7f\u7528\u65b9\u6cd52\r\n\/\/ List&amp;lt;NameValuePair&amp;gt; formparams = new ArrayList&amp;lt;NameValuePair&amp;gt;();\r\n\/\/ formparams.add(new BasicNameValuePair(&quot;param1&quot;, &quot;sfdsfsdfs&quot;));\r\n\/\/ formparams.add(new BasicNameValuePair(&quot;param2&quot;, &quot;9897979789789&quot;));\r\n\/\/ UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams,\r\n\/\/ Consts.UTF_8);\r\n\/\/ HttpPost httpPost = new HttpPost(&quot;www.baidu.com&quot;);\r\n\/\/ httpPost.setEntity(entity);\r\n\/\/ CloseableHttpResponse response = httpEngine.execute(httpPost);\r\n\/\/ result = parseResponse2String(response);\r\n\/\/ response.close();\r\n\/\/ System.out.println(result);\r\n\r\n\/\/ }\r\n\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5bf9httpclient4.4\u8fdb\u884c\u5c01\u88c5 1.httpclient\u5355\u4f8b\u6a21\u5f0f 2.\u8bf7\u6c42\u5f02\u5e38\u91cd\u8bd5\u4e09\u6b21 3.\u652f&hellip; <a href=\"http:\/\/www.anthonylee.cn\/myblog\/?p=27\" class=\"more-link read-more\" rel=\"bookmark\">\u7ee7\u7eed\u9605\u8bfb <span class=\"screen-reader-text\">\u4f7f\u7528httpclient4.4\u53d1\u9001\u8bf7\u6c42<\/span><i class=\"fa fa-arrow-right\"><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[],"_links":{"self":[{"href":"http:\/\/www.anthonylee.cn\/myblog\/index.php?rest_route=\/wp\/v2\/posts\/27"}],"collection":[{"href":"http:\/\/www.anthonylee.cn\/myblog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.anthonylee.cn\/myblog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.anthonylee.cn\/myblog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.anthonylee.cn\/myblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=27"}],"version-history":[{"count":1,"href":"http:\/\/www.anthonylee.cn\/myblog\/index.php?rest_route=\/wp\/v2\/posts\/27\/revisions"}],"predecessor-version":[{"id":28,"href":"http:\/\/www.anthonylee.cn\/myblog\/index.php?rest_route=\/wp\/v2\/posts\/27\/revisions\/28"}],"wp:attachment":[{"href":"http:\/\/www.anthonylee.cn\/myblog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=27"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.anthonylee.cn\/myblog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=27"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.anthonylee.cn\/myblog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=27"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}