欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

使用httpclient時(shí)會(huì)遇到什么問題

這篇文章主要介紹了使用httpclient時(shí)會(huì)遇到什么問題,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

為企業(yè)提供成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站優(yōu)化、成都營銷網(wǎng)站建設(shè)、競價(jià)托管、品牌運(yùn)營等營銷獲客服務(wù)。成都創(chuàng)新互聯(lián)公司擁有網(wǎng)絡(luò)營銷運(yùn)營團(tuán)隊(duì),以豐富的互聯(lián)網(wǎng)營銷經(jīng)驗(yàn)助力企業(yè)精準(zhǔn)獲客,真正落地解決中小企業(yè)營銷獲客難題,做到“讓獲客更簡單”。自創(chuàng)立至今,成功用技術(shù)實(shí)力解決了企業(yè)“網(wǎng)站建設(shè)、網(wǎng)絡(luò)品牌塑造、網(wǎng)絡(luò)營銷”三大難題,同時(shí)降低了營銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認(rèn)可!

一、前言

httpclient是java開發(fā)中最常用的工具之一,通常大家會(huì)使用其中比較基礎(chǔ)的api去調(diào)用遠(yuǎn)程。長期開發(fā)爬蟲,會(huì)接觸httpclient不常用的api,同時(shí)會(huì)遇到各式各樣的坑

二、問題及解決方案

問題1:Received fatal alert: handshake_failure

問題背景

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

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

解決方案

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

2、替換/jre/lib/security/里面的兩個(gè)jar

3、覆蓋后如果報(bào)錯(cuò)The jurisdiction policy files are not signed by a trusted signer!,說明下載的版本不對,要下對應(yīng)jdk版本的。

問題2:Certificates does not conformto algorithm constraints

問題背景

用mvn打包時(shí)報(bào)錯(cuò), security.cert.CertificateException: Certificates does not conform toalgorithm constraints

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

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

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

解決方案

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

代碼如下:

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:超時(shí)時(shí)間不生效

問題背景

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

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

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

解決方案

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

boolean isRedirect = true;
  if(request != null) {
   HttpParams params = request.getParams();
   if (params instanceof HttpParamsNames) {
    // 暫時(shí)只支持這個(gè)類型
    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)常會(huì)使用fildder來監(jiān)控網(wǎng)絡(luò)請求,但是使用httpclient時(shí)想用fildder會(huì)很難,網(wǎng)上查各種辦法都不好用。

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

解決方案

首先java端

// client builder
HttpClientBuilder builder = HttpClients.custom();
if(useFidder) {
   // 默認(rèn)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)站返回進(jìn)行了gzip壓縮,返回內(nèi)容是壓縮的結(jié)果,需要解壓。

代碼如下:

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()));
        }
       }
      }
     }
    })

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“使用httpclient時(shí)會(huì)遇到什么問題”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

文章題目:使用httpclient時(shí)會(huì)遇到什么問題
本文網(wǎng)址:http://chinadenli.net/article12/giecgc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)Google網(wǎng)站建設(shè)外貿(mào)網(wǎng)站建設(shè)軟件開發(fā)外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)