zoukankan      html  css  js  c++  java
  • HttpClient 报错 Invalid cookie header, Invalid 'expires' attribute: Thu, 01 Jan 1970 00:00:00 GMT

    今天在给我姐夫写一个 QQ 自动加好友的程序,但是在 HttpClient 登陆 QQ 的时候报了一个错:

    2019-02-12 14:08:33.727 [Thread-3] - Invalid cookie header: "Set-Cookie: pt2gguin=;Expires=Thu, 01 Jan 1970 00:00:00 GMT;Path=/;Domain=qq.com;". Invalid 'expires' attribute: Thu, 01 Jan 1970 00:00:00 GMT
    2019-02-12 14:08:33.738 [Thread-3] - Invalid cookie header: "Set-Cookie: pt2gguin=o3413198711;Expires=Tue, 19 Jan 2038 03:14:07 GMT;Path=/;Domain=ptlogin2.qq.com;". Invalid 'expires' attribute: Tue, 19 Jan 2038 03:14:07 GMT
    2019-02-12 14:08:33.751 [Thread-3] - Invalid cookie header: "Set-Cookie: pt_recent_uins=813d3b6002b7444a612a73b16d2bfc8d63cf29eee15b914f23387c79f948909fa0d856264f22e6d89bc1722e84d35c466e84178100c282cb;Expires=Thu, 14 Mar 2019 06:08:34 GMT;Path=/;Domain=ptlogin2.qq.com;HttpOnly;". Invalid 'expires' attribute: Thu, 14 Mar 2019 06:08:34 GMT
    2019-02-12 14:08:33.760 [Thread-3] - Invalid cookie header: "Set-Cookie: RK=jyxghgEN/Q;Expires=Tue, 19 Jan 2038 03:14:07 GMT;Path=/;Domain=qq.com;". Invalid 'expires' attribute: Tue, 19 Jan 2038 03:14:07 GMT
    2019-02-12 14:08:33.772 [Thread-3] - Invalid cookie header: "Set-Cookie: ptcz=c22602e5a8b3b23af9924e4fe230dca938964da3a2536767863084df7c79ffdd;Expires=Tue, 19 Jan 2038 03:14:07 GMT;Path=/;Domain=qq.com;". Invalid 'expires' attribute: Tue, 19 Jan 2038 03:14:07 GMT
    2019-02-12 14:08:33.783 [Thread-3] - Invalid cookie header: "Set-Cookie: ptcz=;Expires=Thu, 01 Jan 1970 00:00:00 GMT;Path=/;Domain=ptlogin2.qq.com;". Invalid 'expires' attribute: Thu, 01 Jan 1970 00:00:00 GMT
    2019-02-12 14:08:33.793 [Thread-3] - Invalid cookie header: "Set-Cookie: airkey=;Expires=Thu, 01 Jan 1970 00:00:00 GMT;Path=/;Domain=qq.com;". Invalid 'expires' attribute: Thu, 01 Jan 1970 00:00:00 GMT

    这里提示设置的 Cookie expires 无效,我看了下值都是长这样的 Thu, 01 Jan 1970 00:00:00 GMT。查了下资料发现说是因为 HttpClient4 默认的 cookie 策略是不支持这种格式。

    既然查出原因就好办了

    1、第一种办法就是把服务器设置的 cookie 值改掉

    2、修改默认的 cookie 策略,改为 STANDARD_STRICT 或者 STANDARD

    我这里因为是腾讯的服务器我改不了所有我选择了第二种:

    我这里也不是直接用的 HttpClient4,用的是 net.dongliu.requests 封装好的,我也没找到他有提供修改的 cookie 策略的地方。我比较粗暴,直接把他封装的ClientBuilder 类修改成 CookieSpecs.STANDARD_STRIC 直接类覆盖了。

     RequestConfig.Builder configBuilder = RequestConfig.custom()
                  .setConnectTimeout(connectTimeout)
                  .setSocketTimeout(socketTimeout)
                  // we use connect timeout for connection request timeout
                  .setConnectionRequestTimeout(connectTimeout)
                  .setCookieSpec(CookieSpecs.STANDARD);

    或者直接

    HttpClient httpClient = HttpClients.custom()
           .setDefaultRequestConfig(RequestConfig.custom()
           .setCookieSpec(CookieSpecs.STANDARD).build())
           .build();

    也有说可以用 BROWSER_COMPATIBILITY 或者 NETSCAPE  策略的,但是我试了没有成功。

    相关资料链接:

    https://stackoverflow.com/questions/36473478/fixing-httpclient-warning-invalid-expires-attribute-using-fluent-api

    https://issues.apache.org/jira/browse/HTTPCLIENT-1077

  • 相关阅读:
    10分钟学会理解和解决MySQL乱码问题
    C# 序列类为 xml 可以使用的特性大全
    C# GUID ToString
    C# GUID ToString
    C# AddRange 添加位置
    C# AddRange 添加位置
    VisualStudio 使用多个环境进行调试
    VisualStudio 使用多个环境进行调试
    C# 使用外部别名
    C# 使用外部别名
  • 原文地址:https://www.cnblogs.com/lionsblog/p/10365529.html
Copyright © 2011-2022 走看看