2015-09-17 107 views
0

我正在使用瀏覽器和jetty/apache httpclient訪問一個網站(我隱藏起源網站名稱,因爲它違背了策略)。Jetty客戶端http錯誤代碼412

該網站與網頁瀏覽器正常工作。

使用API​​我能夠登錄到網站,獲取會話cookie JSESSIONID和主頁html內容。但之後,當我提交任何形式或從HTML調用鏈接我收到HTTP錯誤代碼412(前提條件失敗)。

我明白這個錯誤是由於在客戶端頭問題。我設置了瀏覽器中的所有頭文件(使用chrome瀏覽器中的inspect元素進行檢查)。我仍然有同樣的錯誤。

我無法追查哪個標題導致問題。

下面是從瀏覽器 請求頭頁眉

  • 接受:text/html的,應用/ XHTML + xml的,應用/ XML; Q = 0.9,圖像/ WEBP,/; Q = 0.8
  • 接受編碼:gzip,緊縮
  • 接受語言:EN-GB,EN-US; q = 0.8,連接; q = 0.6
  • 緩存控制:最大年齡= 0
  • 連接:保持活着
  • 的Content-Length:318
  • 內容類型:應用/ X WWW的窗體-urlencoded
  • 曲奇:語言= en_IN; __gads = ID = 14c64d8f9fd7de54:T = 1424658276:S = ALNI_Mba1kvJO4mLo7R-T2jUJE9zCYck5A; SLB_Cookie = ffffffff09461c2d45525d5f4f58455e445a4a422971; JSESSIONID = 36m4Oo6dCML_Wvx-Wgmm9rtLh9mb​​URxnZhWIVwg-zHaNzFQeUt9C -1989013783!; _ga = GA1.3.379900459.1428120216
  • 主機:www.irctc.co.in
  • 產地:https://www.example.com
  • 的Referer:https://www.example.com/context/home
  • 升級不安全-要求:1
  • 的User-Agent:Mozilla的/ 5.0(Windows NT的10.0; WOW64)爲AppleWebKit/537.36(KHTML,例如Gecko)鉻/ 44.0.2403.157 Safari瀏覽器/ 537.36

相同的報頭我從碼頭客戶端設置。

Request request = httpClient.newRequest(url); 
    request.method(HttpMethod.POST); 
    request.agent(USER_AGENT); 
     request.accept("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"); 
    request.header(HttpHeader.REFERER,"https://www.example.com/context/home"); 
    request.header(HttpHeader.ACCEPT_ENCODING, "gzip, deflate"); 
    request.header(HttpHeader.ACCEPT_LANGUAGE, "en-GB,en-US;q=0.8,en;q=0.6"); 
    request.header(HttpHeader.CACHE_CONTROL, "max-age=0"); 
    request.header(HttpHeader.CONNECTION, "keep-alive"); 
    request.header(HttpHeader.CONTENT_TYPE, "application/x-www-form-urlencoded"); 
    request.header(HttpHeader.HOST, "www.example.com); 

for (Map.Entry<String, String> entry : params.entrySet()){ 
    request.param(URLEncoder.encode(entry.getKey(), "UTF-8"), URLEncoder.encode(entry.getValue(), "UTF-8")); 
     if(!StringUtils.isEmpty(content)){ 
      content+="&"; 
     } 

     content+=URLEncoder.encode(entry.getKey(), "UTF-8")+"="+URLEncoder.encode(entry.getValue(), "UTF-8"); 
} 
request.header(HttpHeader.CONTENT_LENGTH, ""+content.length()); 

我看到JSESSIONID和SLB_Cookie出現在請求中。由於該網站不在我們的控制範圍內,我實在無法追蹤到底是什麼問題。

請幫我解決這個問題。讚賞任何指針來解決客戶端問題。有什麼辦法可以確定哪個頭部導致這個問題。

+0

看起來像是發佈請求內容 - 長度不是明確要求的。所以它似乎沒有與內容長度 – user2672763

+0

問題我看到這個問題可能與JSF viewstate參數。我正在提交的表單包含javax.faces.ViewState隱藏參數。如果從提交中刪除此參數,我會返回相同的頁面作爲迴應。有了這個參數,我得到了412.仍然問題是相同的形式submisison與瀏覽器工作正常,但不是從jetty/apache httpclient – user2672763

回答

0

我解決了這個問題。

問題與表單參數值。我正在發送由碼頭客戶端再次編碼的編碼值