'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?
答案 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-Cookie
和Domain
指令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