2 Stimmen

Fügt Apache HttpClient die Cookies, die von der java.net.CookieHandler gesetzt, um Anfrage?

Meine einfache Apache HttpClient (4.0.1) Client-Anwendung stellt eine HttpGet-Anforderung an eine Server-URL in der main()-Methode und gibt die Antwort. Beim Starten registriert die Anwendung eine Implementierung von java.net.CookieHandler in einem statischen Block.

Bei der Überprüfung der Cookies, die auf der Serverseite empfangen werden, habe ich festgestellt, dass die Cookies nicht vom Server empfangen werden, wenn der HttpClient die GET-Anforderung stellt.

Wenn ich jedoch den Apache HttpClient durch eine einfache java.net.URL(HTTP_URL).openStream() ersetzte, wurden die Cookies durch den CookieHandler auf der Anfrage gesetzt und vom Server empfangen.

Ist es, dass CookieHandler nicht mit Apache HttpClient funktioniert?

Code:

Kunde.java

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

HttpClient verwenden (setzt keine Cookies auf Anfrage)

        HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(HTTP\_URL);
        client.execute(get);

Verwendung von java.net.URL (setzt die Cookies auf Anfrage)

        URL url = new URL(HTTP\_URL); 
        InputStream is = url.openStream();

3voto

Stephen C Punkte 665668

Ist es, dass CookieHandler nicht mit Apache HttpClient funktioniert?

Das ist richtig.

Die Apache HttpClient-Codebasis verwendet eigene Darstellungen / Mechanismen für Cookies und Cookiespeicher. Hier ist ein Link zu dem entsprechenden Abschnitt in der HttpClient-Tutorial . (Es ist ziemlich skizzenhaft, aber wenn Sie sich die Javadocs für die entsprechenden Klassen ansehen, sollten Sie in der Lage sein, herauszufinden, wie man es benutzt).

(Wenn Sie eine ältere Version von Apache HttpClient verwenden, sollten Sie beachten, dass sich die APIs erheblich geändert haben).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X