最近才开始接触这个工具包,官网上目前已经更新到HttpClient4.5.2了。google的时候看到HttpClient从4.0版本改了底层,因此使用时会出现一些方法不再适用的问题,这里记录出现的一些问题以及相应替代的方法。
1、 创建HttpClient时使用下面的语句,会出现org.apache.http.impl.client.DefaultHttpClient' is deprecated
1
| HttpClient httpClient = new DefaultHttpClient();
|
可以使用如下语句代替:来源
1
| HttpClient httpClient = HttpClientBuilder.create().build();
|
或者
1 2 3 4 | // 创建HttpClientBuilder HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); // HttpClient CloseableHttpClient httpClient = httpClientBuilder.build(); |
2、 设置代理,HttpClient4.5.2版本可以使用如下语句:
1 2 3 4 5 6 | //创建代理 HttpHost proxy = new HttpHost("your proxy IP", port); RequestConfig config = RequestConfig.custom().setProxy(proxy).build(); //设置HttpPost/HttpGet使用代理 httpost.setConfig(config); |
3、get或post时,如果访问的网站是https协议的,可以用如下方式访问:信任所有证书,如果可以具体到每个证书,就更好了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | try { SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { //信任所有 public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { return true; } }).build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext); return HttpClients.custom().setSSLSocketFactory(sslsf).build(); } catch (KeyManagementException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyStoreException e) { e.printStackTrace(); } return HttpClients.createDefault(); } |