我簡單的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();