许多网络应用程序在多个 Set-Cookie 标头中发送 cookie,一个标头对应一个 cookie。 请求将这些标头加入一个用逗号分隔的大标头中。
从同一个 webapp 到 requests.get
Set-Cookie: ASP.NET_SessionId=token1; path=/; HttpOnly
Set-Cookie: Cookie1=token2; path=/ecp
Set-Cookie: X-BEResource=WIN-RBFR0BDA7V7.testlab.net~1; path=/ecp/15.0.516.30; HttpOnly
Set-Cookie: X-BackEndCookie=token3; expires=Mon, 03-Apr-2017 12:25:07 GMT; path=/ecp; HttpOnly
在请求中:
resp.headers 这看起来像
Set-Cookie: ASP.NET_SessionId=token1; path=/; HttpOnly,
Cookie1=token2; path=/ecp,
X-BEResource=WIN-RBFR0BDA7V7.testlab.net~1; path=/ecp/15.0.516.30; HttpOnly,
X-BackEndCookie=token3; expires=Thu, 06-Apr-2017 08:27:22 GMT; path=/ecp; HttpOnly
Firefox、IE、Chrome 无效解释此 cookie,因为分隔符是逗号但在字段 EXPIRES 逗号分隔日期和日期。
修改流量的主要问题。 在我看来,服务器发送多个标头库必须返回多个标头
Requests 不承诺以从服务器收到的形式保留标头。 现在,我强烈建议您使用 cookiejar Requests 来存储 cookie,而不是从头中提取它们:我们正确地将它们插入那里。
从长远来看,我们可能应该添加一个修复程序来排除Set-Cookie
标头以这种方式加入。
这让我们很受打击,并花费了我们好几个小时。 我想投票保留Set-Cookie
不变。 为什么请求总是摆弄标题? 有什么好的理由吗? 恕我直言,它只会让每个人的事情复杂化。 我错过了什么?
感谢您的出色工作!
嗨,有一种方法可以使用https://github.com/Ousret/kiss-headers正确解析标头requests
将无法很快更改标头的表示形式。
最有用的评论
Requests 不承诺以从服务器收到的形式保留标头。 现在,我强烈建议您使用 cookiejar Requests 来存储 cookie,而不是从头中提取它们:我们正确地将它们插入那里。
从长远来看,我们可能应该添加一个修复程序来排除
Set-Cookie
标头以这种方式加入。