2011-02-22 147 views
2

我簡單的Apache HttpClient(4.0.1)客戶端應用程序向main()方法中的服務器URL發出HttpGet請求並打印響應。在啓動時,應用程序在一個靜態塊中註冊一個java.net.CookieHandler的實現。Apache HttpClient是否將由java.net.CookieHandler設置的Cookie添加到請求?

在檢查服務器端收到的cookie時,我發現當HttpClient發出GET請求時服務器沒有收到cookie。另一方面,當我用普通的java.net.URL(HTTP_URL).openStream()替換Apache HttpClient時,Cookie由CookieHandler在請求中設置並被服務器接收。

CookieHandler是否不支持Apache HttpClient?

代碼:

Client.java

 
static { 
     CookieHandler.setDefault(new CookieHandler() { 
       public Map get(URI u, List r) { 
       return Collections.singletonMap("Cookie", 
           Collections.singletonList(COOKIE_STRING)); 
       } 
     }); 
} 

使用HttpClient的(不把餅乾收費)

 
     HttpClient client = new DefaultHttpClient(); 
     HttpGet get = new HttpGet(HTTP_URL); 
     client.execute(get); 

使用的java.net.URL(根據要求設置Cookie)

 
     URL url = new URL(HTTP_URL); 
     InputStream is = url.openStream(); 

回答

3

CookieHandler是否不支持Apache HttpClient?

這是正確的。

Apache HttpClient代碼庫使用它自己的cookie和cookie存儲表示/機制。以下是HttpClient tutorial相關部分的鏈接。 (這很粗略,但如果你看看相關類的javadoc,你應該能夠弄清楚如何使用它。)

(如果您使用的是較早版本的Apache HttpClient,請注意原料藥發生了顯着變化。)

相關問題