使用Requests库登录后如何获取响应Cookie?
你的问题出在没有用会话保持请求状态,两次独立的requests.post和requests.get是完全隔离的,手动传递response.cookies只会带上登录请求返回的部分Cookie,后续页面返回的新Cookie(比如会话更新的token)没被跟踪到。
直接用requests.Session()就能解决,会话对象会自动维护所有Cookie的变化,包括登录后响应里的新Cookie,不用手动处理:
import requests # 创建会话对象,自动维护Cookie session = requests.Session() url = 'http://website/login' creds = {'_method':'****','username':'*****','password':'*****'} # 用会话发送登录请求,会话会保存登录后的所有Cookie login_response = session.post(url, data=creds) # 用同一个会话发送目标页面请求,自动带上最新的Cookie report_response = session.get('http://website/reports/view/17') # 可以查看当前会话的所有Cookie,确认是否包含响应里的新Cookie print(session.cookies)
额外注意点
- 登录请求如果有重定向(比如登录后自动跳转到首页),会话会自动跟踪重定向过程中的所有
Set-Cookie头,不用额外处理。 - 如果之前手动保存Cookie没生效,是因为你只保存了登录请求的Cookie,没把后续页面返回的新Cookie也加进去,而会话会自动做这件事。
- 检查登录请求的响应头里的
Set-Cookie,会话会把这些全部存入session.cookies,后续请求会自动带上。
内容的提问来源于stack exchange,提问作者Le_Me
相关产品推荐
相关产品推荐

