2013-12-10 46 views
0

我有一個HttpClient實例獲取遠程資源。我將其配置爲處理重定向。HttpClient 4重定向處理不同的內部Tomcat

 HttpParams params = new BasicHttpParams(); 
     params.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 
      SOCKET_TIMEOUT); 
     params.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 
       CONNECTION_TIMEOUT); 
     params.setLongParameter(ClientPNames.CONN_MANAGER_TIMEOUT, 
       CONN_MANAGER_TIMEOUT_VALUE); 
     params.setParameter(ClientPNames.COOKIE_POLICY, 
       CookiePolicy.BROWSER_COMPATIBILITY); 

     params.setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, true); 
     params.setBooleanParameter(ClientPNames.REJECT_RELATIVE_REDIRECT, 
       false); 
     params.setIntParameter(ClientPNames.MAX_REDIRECTS, 4); 
     httpclient = new DefaultHttpClient(cm, params); 

當我從webapp(Tomcat6)中調用它時,我得到了301響應。當我從JSE環境調用它時,我得到了200個最終響應(重定向得到處理)。我的第一個嫌疑犯是類加載問題,但打印出HttpClient類的來源顯示,這兩次從httpclient-4.2.5.jar加載

任何想法,我可以調試嗎?

回答

1

運行HttpClient,並按照here所述打開上下文/線路日誌記錄,並比較兩種環境中交換的HTTP消息。

+0

感謝您的建議。日誌行顯示它最有可能是相同版本的代碼(按源代碼行號彙編),但唯一的區別是它不處理重定向。 DefaultRequestDirector中重定向處理之前的每個日誌行都是相同的。我看不到這些設置有什麼不同。 – Kafkaesque

+0

@Kafkaesque由HttpClient生成的用戶代理頭應包含發佈版本。請將會話日誌添加到原始問題或將它們發佈到HttpClient用戶列表。對於隱藏在服務器機房中的火星人的可能性,HttpClient默認配置應該總是自動遵循有效的重定向位置。 – oleg

+0

我即將發佈日誌,但隨後嘗試升級到httpclient 4.2.6版,它似乎解決了這個問題。感謝您的幫助 – Kafkaesque

0

HttpClient實例在整個webapp中共享,包括SolrJ(Solr客戶端),它將「跟隨重定向」參數設置爲false。我通過創建具有額外記錄行的RequestDirector副本來解決這個問題。我可以簡單地尋找所有呼叫HttpClient.getParams()。你懂得越多。