Добавляет ли Apache HttpClient файлы cookie, установленные java.net.CookieHandler, для запроса? - PullRequest
2 голосов
/ 23 февраля 2011

Мое простое клиентское приложение Apache HttpClient (4.0.1) делает запрос HttpGet на URL-адрес сервера в методе main () и печатает ответ.При запуске приложение регистрирует реализацию java.net.CookieHandler в статическом блоке.

При проверке файлов cookie, полученных на стороне сервера, я обнаружил, что файлы cookie не принимаются Сервером, когда HttpClientделает запрос GET.

С другой стороны, когда я заменил Apache HttpClient на простой java.net.URL (HTTP_URL) .openStream (), файлы 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 (файлы cookie по запросу не помещаются)

        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();

1 Ответ

3 голосов
/ 23 февраля 2011

Это то, что CookieHandler не работает с Apache HttpClient?

Это правильно.

База кода Apache HttpClient использует свои собственные представления и механизмы cookie и хранилища cookie. Вот ссылка на соответствующий раздел учебника HttpClient . (Это довольно схематично, но если вы посмотрите на javadocs для соответствующих классов, вы сможете понять, как его использовать.)

(Если вы используете более старую версию Apache HttpClient, помните, что API-интерфейсы значительно изменились.)

...