Python请求set-cookie设置不正确

时间:2019-06-30 11:27:15

标签: python cookies python-requests

'Set-cookie'没有正确返回到请求会话。

代码:

import requests

r = requests.Session()
respond = r.put("192.168.1.111/getC", json=data, verify=False)

让我们检查响应的Cookie(空)

respond.cookies
<RequestsCookieJar[]>

让我们检查标题

respond.headers
{'Content-Type': 'application/json; charset=UTF-8', 'Date': 'Sun, 30 Jun 2019 11:19:05 GMT+00:00', 'Accept-Ranges': 'bytes', 'Server': 'Restlet-Framework/2.3.12', 'Set-Cookie': 'Credentials=sdf34dsfsdf23rsdfsdf234r23r23r; Path=/; Domain=blah.local; Secure'}

让我们检查会话的Cookie(空)

r.cookies
<RequestsCookieJar[]>

我认为requests应该自动将set-cookie加载到会话中,对吧?为什么它在这里不起作用?如何在此处使用标题设置cookie?

2 个答案:

答案 0 :(得分:1)

我认为这里的requests没问题,可能是服务器给您错误的响应。

似乎requests由于其中不适当的Set-Cookie section而无法识别此Domain响应标头:

'Set-Cookie': 'Credentials=sdf34dsfsdf23rsdfsdf234r23r; Path=/; Domain=blah.local; Secure'

我已经在localhost上设置了一个测试Web服务器,并尝试手动设置Set-Cookie标头,与上面的完全相同,并且响应的cookie为空。

然后我从; Domain=blah.local; Secure标头(Set-CookieDomain指令are optional)中删除了Secure部分,一切正常。

答案 1 :(得分:-1)

在处理请求之前创建Session

import requests
s = requests.Session()
response = s.put("192.168.1.111/getC", json=data, verify=False)

如文档https://2.python-requests.org/en/master/user/advanced/中所述:

  

会话对象

     

Session对象允许您在请求中保留某些参数。它还会在来自会话实例的所有请求中保留cookie,并将使用urllib3的连接池。因此,如果您要向同一主机发出多个请求,则基础TCP连接将被重用,这可以显着提高性能(请参阅HTTP持久连接)。

然后,检查Cookie是否不在response内,而是在会话级别:

s.cookies