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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章