国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > Apache > 正文

Apache HttpClient中循環(huán)重定向的bug詳解

2024-08-27 18:22:34
字體:
供稿:網(wǎng)友

最近在使用Apache HttpClient4.x時(shí)發(fā)現(xiàn)如果出現(xiàn)循環(huán)重定向的話就會(huì)出現(xiàn)bug問題了,這樣導(dǎo)致服務(wù)器無法正常訪問,會(huì)一直跳來跳去了,下面我來給大家介紹解決此問題的方法.

在Apache HttpClient 4.0里有個(gè)循環(huán)重定向的bug,當(dāng)服務(wù)器試圖正常的從域名A跳轉(zhuǎn)到B的時(shí)候就會(huì)發(fā)生,我是在 Vevb.com 跳 m.survivalescaperooms.com 的時(shí)候發(fā)現(xiàn)的,換過最新版也發(fā)現(xiàn)還是有這個(gè)問題.

跟蹤了DefaultRequestDirector.java之后發(fā)現(xiàn),它在內(nèi)部創(chuàng)建了一個(gè)HttpRedirect對象來處理重定向,這個(gè)對象會(huì)重用你之前的HttpGet對象里的HTTP 頭,導(dǎo)致這個(gè)bug的根源在于,連Host頭也用了,這表示重定向到的新域名如果和老域名如果是同一組集群,那么服務(wù)器會(huì)試圖重新發(fā)一個(gè)重定向請求,這樣就造成了HttpClient拋出CircularRedirectException.

我是派生了DefaultRequestDirector類來改掉這個(gè)問題,代碼如下:

  1. public class RedirectRequestDirector extends DefaultRequestDirector 
  2.     RedirectRequestDirector( 
  3.             final HttpRequestExecutor requestExec, 
  4.             final ClientConnectionManager conman, 
  5.             final ConnectionReuseStrategy reustrat, 
  6.             final ConnectionKeepAliveStrategy kastrat, 
  7.             final HttpRoutePlanner rouplan, 
  8.             final HttpProcessor httpProcessor, 
  9.             final HttpRequestRetryHandler retryHandler, 
  10.             final RedirectHandler redirectHandler, 
  11.             final AuthenticationHandler targetAuthHandler, 
  12.             final AuthenticationHandler proxyAuthHandler, 
  13.             final UserTokenHandler userTokenHandler, 
  14.             final HttpParams params)  
  15.     { 
  16.         super(requestExec, conman, reustrat, kastrat, rouplan, httpProcessor, retryHandler, redirectHandler, targetAuthHandler, proxyAuthHandler, userTokenHandler, params); 
  17.  
  18.     } 
  19.     @Override 
  20.     protected RoutedRequest handleResponse(RoutedRequest roureq, 
  21.             HttpResponse response, 
  22.             HttpContext context) 
  23.                     throws HttpException, IOException 
  24.     { 
  25.         RoutedRequest req = super.handleResponse(roureq, response, context); 
  26.         if(req != null) 
  27.         { 
  28.             String redirectTarget = req.getRoute().getTargetHost().getHostName(); 
  29.             req.getRequest().getOriginal().setHeader("Host", redirectTarget);//開源代碼Vevb.com 
  30.         } 
  31.         return req; 
  32.     } 
  33.  

這里修改了Host頭為試圖重定向的主機(jī)名,還需要修改 DefaultHttpClient,代碼如下:

  1. public class RedirectHttpClient extends DefaultHttpClient 
  2.     @Override 
  3.     protected RequestDirector createClientRequestDirector( 
  4.             final HttpRequestExecutor requestExec, 
  5.             final ClientConnectionManager conman, 
  6.             final ConnectionReuseStrategy reustrat, 
  7.             final ConnectionKeepAliveStrategy kastrat, 
  8.             final HttpRoutePlanner rouplan, 
  9.             final HttpProcessor httpProcessor, 
  10.             final HttpRequestRetryHandler retryHandler, 
  11.             final RedirectHandler redirectHandler, 
  12.             final AuthenticationHandler targetAuthHandler, 
  13.             final AuthenticationHandler proxyAuthHandler, 
  14.             final UserTokenHandler stateHandler, 
  15.             final HttpParams params) { 
  16.         return new RedirectRequestDirector( 
  17.                 requestExec, 
  18.                 conman, 
  19.                 reustrat, 
  20.                 kastrat, 
  21.                 rouplan, 
  22.                 httpProcessor, 
  23.                 retryHandler, 
  24.                 redirectHandler, 
  25.                 targetAuthHandler, 
  26.                 proxyAuthHandler, 
  27.                 stateHandler, 
  28.                 params); 
  29.     } 

現(xiàn)在就能正常處理跳轉(zhuǎn)了.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 武安市| 平陆县| 金寨县| 广元市| 广饶县| 安岳县| 崇信县| 沙湾县| 陇西县| 娄底市| 伊川县| 彝良县| 综艺| 华宁县| 杭锦旗| 青川县| 越西县| 泗阳县| 英吉沙县| 台前县| 康马县| 稷山县| 山西省| 仁化县| 友谊县| 方正县| 佳木斯市| 瓦房店市| 通州区| 蕲春县| 栾川县| 富平县| 利川市| 保亭| 朝阳县| 蒲城县| 高碑店市| 定州市| 霍州市| 梁河县| 茌平县|