【问题标题】:HttpClient WARNING: Cookie rejected: Illegal domain attributeHttpClient 警告:Cookie 被拒绝:非法域属性
【发布时间】:2011-09-18 03:20:12
【问题描述】:

我正在使用 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/");

是的,只有第二个....我收到了这个错误消息;

2011 年 9 月 18 日上午 10:11:30 org.apache.http.client.protocol.ResponseProcessCookies processCookies 警告:Cookie 被拒绝:“[版本:0][名称:CookiePst][值: 0149=xwGHF7HYDHLHQ84Isp/eSy9vu+Xq6cT12wxg1A==][域: .mcore.com][path: /][expiry: Sun Sep 18 10:38:59 ICT 2011]"。非法 域属性“mcore.com”。来源域:“goklik.co.id”

我意识到这里涉及到 Cookie。但我不明白警告的含义。而且我也不知道如何解决(Cookie没有被拒绝)。希望有一点光明可以让你们清除我的思绪....:D

【问题讨论】:

    标签: java cookies warnings httpclient


    【解决方案1】:

    也许为时已晚,但我遇到了同样的问题,我找到了一些帮助我解决问题的方法,只需将 Cookie Policy 设置为浏览器兼容性:

    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: 不要自动处理 cookie

    【讨论】:

    • 我遇到了同样的问题,但由于我对 cookie 不感兴趣,所以我设置了 CookiePolicy.IGNORE_COOKIES 并为我做到了(使用 BROWSER_COMPATIBILITY 我不断收到消息)。
    • 这条消息是什么意思,CookiePolicy.BROWSER_COMPATIBILITY 是什么意思?
    【解决方案2】:

    你无法“修复”它。该站点正在尝试设置一个不允许设置的 cookie,而您正在使用的 apache 客户端库正在告诉您。

    当域为goklik.co.id时,它试图为mcore.com设置一个cookie

    【讨论】:

    • 哈??您确定吗??我的天啊。我想,从客户端(我这边),我应该在发出另一个使用 mcore.com 而不是所需的 goklik.co.id 的 GET 请求(传递 cookie)之前重新创建我的 cookie :(
    • 您正在使用符合适当标准的客户端。查看org.apache.http.client 的JavaDocs 我看不到覆盖它的方法(可用的 org.apache.http.client.params.CookiePolicy 选项都符合标准)。
    • 我遇到了同样的问题,但我向同一个站点发送了请求。你是什​​么意思“该网站正在尝试设置一个不允许设置的cookie”。为什么这是问题?在我的情况下(同一个站点),我真的没有办法解决这个问题吗?
    【解决方案3】:

    httpclient 4.3 之前,this answer 在同一个页面很酷。

    但是自从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,
    

    【讨论】:

    • Jonathan Silva 的回答 – 用户可能已经更改了他们的名字(我想是 Jon Cardoso),所以链接可能比直呼他们的名字更好
    • @törzsmókus 谢谢,我已经按照建议更新了答案。
    【解决方案4】:

    我正在使用 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();
    

    【讨论】:

      【解决方案5】:

      这是在 v4.5.x4.5.6 现在)中抑制警告的最简单方法:

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

      【讨论】:

        【解决方案6】:

        只是想改进 Eric 的答案,因为它不能直接解决我的情况,但将 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 已经被贬值了。

        【讨论】:

          【解决方案7】:

          如果您不需要处理 cookie,您可以简单地禁用它,使用 org.apache.http.impl.cookie.IgnoreSpecProviderorg.apache.http.impl.cookie.IgnoreSpec 取决于您使用的 API。在HttpClientBuilder 上调用disableCookieManagement() 是不够的

          【讨论】:

            猜你喜欢
            • 2016-05-26
            • 2014-02-21
            • 2012-07-14
            • 2020-08-30
            • 1970-01-01
            • 2018-09-30
            • 2018-04-14
            • 2013-09-17
            • 1970-01-01
            相关资源
            最近更新 更多