Python请求获取Cookies

102
x = requests.post(url, data=data)
print x.cookies

我使用了requests库从一个网站获取一些cookies,但是我只能从响应中获取cookies,如何从请求中获取cookies?谢谢!

3个回答

189

或者,您可以使用requests.Session并观察请求前后的cookies

>>> import requests
>>> session = requests.Session()
>>> print(session.cookies.get_dict())
{}
>>> response = session.get('http://google.com')
>>> print(session.cookies.get_dict())
{'PREF': 'ID=5514c728c9215a9a:FF=0:TM=1406958091:LM=1406958091:S=KfAG0U9jYhrB0XNf', 'NID': '67=TVMYiq2wLMNvJi5SiaONeIQVNqxSc2RAwVrCnuYgTQYAHIZAGESHHPL0xsyM9EMpluLDQgaj3db_V37NjvshV-eoQdA8u43M8UwHMqZdL-S2gjho8j0-Fe1XuH5wYr9v'}

6
这将不会返回“路径”和“域名”,有什么建议吗? - Or Duan
4
如此操作即可遍历请求返回的Cookie对象,具体方法是通过r = requests.get('...')获取请求的响应,然后使用r.cookies._cookies进行迭代。该字典的键为[<domain>][<path>] - Greg Sadetsky
1
@GregSadetsky 噢,哇,那已经是很多年前的事情了,我会将我当时使用的解决方案发布为答案 :) - Or Duan
1
@RicardoBarrosLourenço 刚刚尝试了一下使用 requests 2.20.1,无论是迭代 r.cookies(并获取 domain 属性),还是访问 r.cookies._cookies,都可以正常工作。你能否尝试一下 http://google.com?你正在访问的 URL 是否因为不同的用户代理而返回了不同的内容?如果将 requests 的用户代理设置为 Firefox,是否可以正常工作? - Greg Sadetsky
现在是2021年,你可以执行r = requests.get(https://...)然后执行r.cookies.get_dict() - Aditya Rajgor
显示剩余3条评论

20
如果您需要每个cookie的路径和域,而get_dict()未公开,则可以手动解析cookies,例如:

[
    {'name': c.name, 'value': c.value, 'domain': c.domain, 'path': c.path}
    for c in session.cookies
]

1
url = "http://localhost:8070/web/session/authenticate"
data = {}
header = {"Content-Type": "application/json"}
x = requests.post(url, json=data, headers=header)
print(x.cookies.get_dict())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接