requests的session为什么不携带登录信息了?

王胖胖
  • 29

代码如下:

import requests
mi_requests = requests.Session()

response_first = mi_requests.get(url=login_url_first,headers=login_header_first)
print response_first.request.headers
print response_first.cookies['JSESSIONID']
response_second = mi_requests.get(url=login_url_second)
print response_second.request.headers

返回信息:

第一个print
{'Accept-Language': 'zh-CN,zh;q=0.9', 'Accept-Encoding': 'gzip, deflate', 'Host': 'e.mi.com', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1'}

第二个Print
aaaeKLWkeCfZWhAGOF_iw

第三个Print
{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.18.4'}

session实例化,为什么不携带http头信息了?

回复
阅读 4k
3 个回答
✓ 已被采纳
mi_requests = requests.Session()

你实例化了Session后没有设置mi_requests.headers,而是为第一个request单独传了一个headers
两种headers是会merge,但单独传的并不会设置成session的。
所以统一设置

mi_requests.headers = login_header_first

如果有额外独立的headers属性可以再放到每个request参数里传入。

response_second = mi_requests.get(url=login_url_second, headers=login_header_first)

import requests
mi_requests = requests.Session()
mi_requests.headers = login_header_first

response_first = mi_requests.get(url=login_url_first)
print response_first.request.headers
response_second = mi_requests.get(url=login_url_second)
print response_second.request.headers
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏