HttpClient ПРЕДУПРЕЖДЕНИЕ. Файл cookie отклонен: недопустимый атрибут домена

Я использую HttpClient последней версии (4.x). И сейчас я пытаюсь сделать запрос GET. Я просто отправляю запрос на получение.

Это мой кодекс;

public class Poster {

    static boolean routing1 = true, routing2 = true;
    static int counter1 = 0, counter2 = 0;
    DefaultHttpClient oHtp = null;
    HttpGet oHGet = null;
    HttpResponse oHRes = null;


    private void test(String fullAddress) throws Exception {
        oHtp = new DefaultHttpClient();
        oHGet = new HttpGet(fullAddress);

        HttpResponse response = oHtp.execute(oHGet);
        System.out.print(response.getStatusLine());

        HttpEntity entity = response.getEntity();
        if (entity != null) {
            entity = new BufferedHttpEntity(entity);
            //  System.out.println(EntityUtils.toString(entity));
            System.out.print("\t entity is retrieved... ");
        }


        oHtp.getConnectionManager().shutdown();
    }
}

Я просто выполняю это красиво. Во-первых

new Poster().test("http://123.xl.co.id/profile.php");

и второй

 new Poster().test("http://goklik.co.id/");

да, и только второй.... я получил это сообщение об ошибке;

18 сентября 2011 г. 10:11:30 org.apache.http.client.protocol.ResponseProcessCookies processCookies ПРЕДУПРЕЖДЕНИЕ: файл cookie отклонен: "[версия: 0][имя: CookiePst][значение: 0149=xwGHF7HYDHLHQ84Isp/eSy9vu+Xq6cAw = Xq6cTwx ][domain: .mcore.com][path: /][expiry: Sun Sep 18 10:38:59 ICT 2011]". Неверный атрибут домена "mcore.com". Домен происхождения: "goklik.co.id"

Я понял, что Cookie задействован здесь. Но я не понимаю, что означает Предупреждение. И я также не знаю, как ее решить (Cookie не отклоняются). Надеюсь, есть немного света, чтобы очистить мой разум от вас, ребята....:D

5 ответов

Решение

Вы не можете "исправить" это. Сайт пытается установить cookie, которые он не может устанавливать, и используемая вами клиентская библиотека apache сообщает вам об этом.

Он пытается установить печенье для mcore.com когда домен goklik.co.id

Может быть, уже слишком поздно, но у меня возникла та же проблема, и я нашел кое-что, что помогло мне решить ее, просто установив Политику использования cookie в совместимость браузера:

httpclient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
        CookiePolicy.BROWSER_COMPATIBILITY);

Вот возможные значения:

Политика использования файлов cookie обеспечивает соответствующий интерфейс управления файлами cookie для данного типа или версии файлов cookie.

Спецификация RFC 2109 используется по умолчанию. При необходимости можно выбрать другую поддерживаемую спецификацию или установить по умолчанию

Предоставляются следующие спецификации:

  • BROWSER_COMPATIBILITY: совместимо с обычными методами управления файлами cookie (даже если они не соответствуют стандартам на 100%)
  • NETSCAPE: Netscape cookie, совместимый с черновиком
  • RFC_2109: Соответствует RFC2109 (по умолчанию)
  • IGNORE_COOKIES: не обрабатывать куки автоматически

До httpclient 4,3, Jonathan SilvaОтвет крутой.

Но так как httpclient 4.3, API, кажется, сильно изменился, следующий код будет работать:

RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY).build();
HttpClientBuilder customizedClientBuilder = HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig);
CloseableHttpClient client = customizedClientBuilder.build(); // customized client,

Я использую http-клиент 4.5.2, и это установило спецификацию cookie, чтобы легко решить мою проблему. Пример того, как создать экземпляр клиента:

httpClient = HttpClients.custom()
                .setDefaultRequestConfig(RequestConfig.custom()
                        // Waiting for a connection from connection manager
                        .setConnectionRequestTimeout(10000)
                        // Waiting for connection to establish
                        .setConnectTimeout(5000)
                        .setExpectContinueEnabled(false)
                        // Waiting for data
                        .setSocketTimeout(5000)
                        .setCookieSpec("easy")
                        .build())
                .setMaxConnPerRoute(20)
                .setMaxConnTotal(100)
                .build();

Вот самый простой способ подавить предупреждение в v4.5.x (прямо сейчас 4.5.6):

HttpClientBuilder clientBuilder = HttpClientBuilder.create();
clientBuilder.disableCookieManagement();
HttpClient httpClient = clientBuilder.build();

Просто хочу улучшить ответ Эрика, так как он не решает мой сценарий напрямую, но изменение CookieSpecs на IGNORE_COOKIES решает мою проблему.

RequestConfig customizedRequestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.IGNORE_COOKIES).build();
HttpClientBuilder customizedClientBuilder = 
HttpClients.custom().setDefaultRequestConfig(customizedRequestConfig);
CloseableHttpClient client = customizedClientBuilder.build(); // customized client,

Потому что в моей версии HttpClient 4.5 CookieSpecs.BROWSER_COMPATIBILITY уже устарела.

Если вам не нужно обрабатывать файлы cookie, вы можете просто отключить их с помощью org.apache.http.impl.cookie.IgnoreSpecProvider или org.apache.http.impl.cookie.IgnoreSpecв зависимости от того, какой API вы используете. ВызовdisableCookieManagement() на HttpClientBuilder недостаточно

Другие вопросы по тегам