亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

那些年用httpclient時踩過的一些坑

 更新時間:2019年05月24日 11:24:35   作者:宜信技術  
這篇文章主要給大家介紹了關于那些年用httpclient時踩過的一些坑,文中通過示例代碼介紹的非常詳細,對大家學習或者使用httpclient具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

一、前言

httpclient是java開發(fā)中最常用的工具之一,通常大家會使用其中比較基礎的api去調(diào)用遠程。長期開發(fā)爬蟲,會接觸httpclient不常用的api,同時會遇到各式各樣的坑,本文將總結這些年遇到的坑及相應的解決方案。

二、問題及解決方案

問題1:Received fatal alert: handshake_failure

問題背景

開發(fā)某省份移動爬蟲時,加載首頁會報標題錯誤,嘗試各種辦法都不好使,后來發(fā)現(xiàn)換了jdk1.8就可以了。經(jīng)過長達一個星期源碼探尋,發(fā)現(xiàn)錯誤源頭是http在握手時,加密算法不支持。

jdk1.8以下版本不支持256位(TLS_DHE_RSA_WITH_AES_256_CBC_SHA )

解決方案

1、下載jce擴展包 http://www.oracle.com/technetwork/cn/java/javase/downloads/jce-7-download-432124.html

2、替換/jre/lib/security/里面的兩個jar

3、覆蓋后如果報錯The jurisdiction policy files are not signed by a trusted signer!,說明下載的版本不對,要下對應jdk版本的。

問題2:Certificates does not conformto algorithm constraints

問題背景

用mvn打包時報錯, security.cert.CertificateException: Certificates does not conform toalgorithm constraints

原因是在java1.6之后的這個配置文件中,認為MD2的加密方式安全性太低,因而不支持這種加密方式,同時也不支持RSA長度小于1024的密文。

需要修改 JAVA_HOME/jre/lib/security/java.security #jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

但是這樣做需要把每臺機器都改一遍,如果新加機器忘記改了,就會繼續(xù)報錯。因此需要一套方法,只在代碼層解決問題。

解決方案

經(jīng)查源碼發(fā)現(xiàn)了觸發(fā)問題的代碼位置,通過強制繼承SSLContextBuilder,并強制把private的keymanagers和trustmanagers的值置空就可以解決這個問題了。

代碼如下:

static class MySSLContextBuilder extends SSLContextBuilder {
 static final String TLS = "TLS";
 static final String SSL = "SSL";
 private String protocol;
 private Set keymanagers;
 private Set trustmanagers;
 private SecureRandom secureRandom;
 public MySSLContextBuilder() {
  super();
  this.keymanagers = new HashSet();
  this.trustmanagers = new HashSet();
 }
}

問題3:超時時間不生效

問題背景

很多人在使用httpclient時會到網(wǎng)上去找例子,例子中經(jīng)常會有類似這樣的設置

httpGet.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, !isAutoRelocal);

使用上述方法發(fā)送httpclient,在讀取配置時,如果發(fā)現(xiàn)getParams不為空,則會使得以前設置的所有參數(shù)都失效,而使用這里設置的,結果是導致超時時間失效。

解決方案

request.getParams().setParameter是過期方法,其中每一項參數(shù)在RequestConfig里都有對應的,遍歷出來替換一遍即可。

boolean isRedirect = true;
  if(request != null) {
   HttpParams params = request.getParams();
   if (params instanceof HttpParamsNames) {
    // 暫時只支持這個類型
    isRedirect = params.getBooleanParameter(
      ClientPNames.HANDLE_REDIRECTS, true);
   }
   // 清空request
   request.setParams(new BasicHttpParams());
  }
  if(timeOut > 0) {
   builder = RequestConfig.custom().setConnectionRequestTimeout(timeOut).setConnectTimeout(timeOut).setSocketTimeout(timeOut).setRedirectsEnabled(isRedirect).setCookieSpec(CookieSpecs.BEST_MATCH);
  } else {
   builder = RequestConfig.custom().setConnectionRequestTimeout(connectionTimeout).setConnectTimeout(connectionTimeout).setRedirectsEnabled(isRedirect).setSocketTimeout(socketTimeout).setCookieSpec(CookieSpecs.BEST_MATCH);
  }

問題4:fildder監(jiān)聽問題

問題背景

開發(fā)爬蟲經(jīng)常會使用fildder來監(jiān)控網(wǎng)絡請求,但是使用httpclient時想用fildder會很難,網(wǎng)上查各種辦法都不好用。

下面為大家來排個錯,使用下面方法就可以完美解決這個問題,讓fildder監(jiān)控更容易。

解決方案

首先java端

// client builder
HttpClientBuilder builder = HttpClients.custom();
if(useFidder) {
   // 默認fidder寫死
   builder.setProxy(new HttpHost("127.0.0.1", 8888));
}

fildder端

tools->fiddler options->https->actions->export root certificate to ... \bin\keytool.exe -import -file C:\Users\\Desktop\FiddlerRoot.cer -keystore FiddlerKeystore -alias Fiddler

問題5:支持gzip

問題及解決方案

有些網(wǎng)站返回進行了gzip壓縮,返回內(nèi)容是壓縮的結果,需要解壓。

代碼如下:

HttpClient wrappedHttpClient = builder.setUserAgent(requestUA)
    .addInterceptorLast(new HttpResponseInterceptor() {
     @Override
     public void process(HttpResponse httpResponse, HttpContext httpContext) throws HttpException, IOException {
      HttpEntity httpEntity = httpResponse.getEntity();
      Header header = httpEntity.getContentEncoding();
      if (header != null) {
       for (HeaderElement element : header.getElements()) {
        if ("gzip".equalsIgnoreCase(element.getName())) {
         httpResponse.setEntity(new GzipDecompressingEntity(httpResponse.getEntity()));
        }
       }
      }
     }
    })

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • spring-data-jpa實現(xiàn)增刪改查以及分頁操作方法

    spring-data-jpa實現(xiàn)增刪改查以及分頁操作方法

    下面小編就為大家分享一篇spring-data-jpa實現(xiàn)增刪改查以及分頁操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Java微信公眾號推送模版消息的步驟示例詳解

    Java微信公眾號推送模版消息的步驟示例詳解

    模板消息是一種向用戶發(fā)送通知的服務,廣泛用于訂單狀態(tài)更新、服務提醒等場景,下面,我將詳細介紹如何使用Java結合微信官方提供的API來實現(xiàn)模板消息的推送,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Spring Security驗證流程剖析及自定義驗證方法

    Spring Security驗證流程剖析及自定義驗證方法

    Spring Security是一個能夠為基于Spring的企業(yè)應用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。這篇文章主要介紹了Spring Security驗證流程剖析及自定義驗證方法,需要的朋友可以參考下
    2018-03-03
  • Spring MVC深入學習之啟動初始化過程

    Spring MVC深入學習之啟動初始化過程

    最近因為工作的原因在學習Spring MVC,為了更深入的學習Spring MVC,下面這篇文章主要給大家介紹了關于Spring MVC深入學習之啟動初始化過程的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • java遍歷http請求request的所有參數(shù)實現(xiàn)方法

    java遍歷http請求request的所有參數(shù)實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨ava遍歷http請求request的所有參數(shù)實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • SpringBoot視圖解析實現(xiàn)原理深入分析

    SpringBoot視圖解析實現(xiàn)原理深入分析

    視圖解析其實就是SpringBoot某一個controller的方法執(zhí)行完成之后,它是跳轉(zhuǎn)到那個頁面。由于我們springboot項目默認打包為jar包,是形成壓縮包的形式,而jsp又不支持壓縮,所以我們SpringBoot不知JSP的,需要引入第三方模板引擎才可以處理
    2022-10-10
  • MybatisPlus多表連接查詢的問題及解決方案

    MybatisPlus多表連接查詢的問題及解決方案

    MybatisPlus官方并沒有提供多表連接查詢的通用解決方案,然而連接查詢是相當普遍的需求,今天通過本文給大家介紹下MybatisPlus多表連接查詢的問題及解決方案,感興趣的朋友一起看看吧
    2022-01-01
  • 大話Java混合運算規(guī)則

    大話Java混合運算規(guī)則

    這篇文章主要介紹了大話Java混合運算規(guī)則,小編覺得挺不錯的,在這里分享給大家,需要的朋友可以了解下。
    2017-10-10
  • 使用Get方式提交數(shù)據(jù)到Tomcat服務器的方法

    使用Get方式提交數(shù)據(jù)到Tomcat服務器的方法

    這篇文章將介紹向服務器發(fā)送數(shù)據(jù),并且服務器將數(shù)據(jù)的處理結果返回給客戶端,本文給大家介紹使用Get方式向服務器發(fā)送數(shù)據(jù),感興趣的朋友一起學習吧
    2016-04-04
  • JDBC連接數(shù)據(jù)庫的方法匯總

    JDBC連接數(shù)據(jù)庫的方法匯總

    這篇文章主要介紹了JDBC連接數(shù)據(jù)庫的方法,結合實例形式總結分析了JDBC連接各種常見數(shù)據(jù)庫的相關實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08

最新評論