如何使用 requests.session 以便在后续 get 请求中保留标头并重用

jim*_*iat 10 python session python-requests

我可能误解了这个requests.session对象。

headers ={'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36'}
s = requests.Session()
r = s.get('https://www.barchart.com/', headers = headers)
print(r.status_code)
Run Code Online (Sandbox Code Playgroud)

200这工作正常并按预期返回。

但是,以下返回403并显示第一个请求的标头尚未像使用浏览器手动保存一样保存在会话中:

headers ={'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36'}
s = requests.Session()
r = s.get('https://www.barchart.com/', headers = headers)
r = s.get('https://www.barchart.com/futures/quotes/CLQ20')
print(r.status_code)
print(s.headers)
Run Code Online (Sandbox Code Playgroud)

我认为有一种方法可以使用会话对象将 1 个请求复合到另一个请求中的标头、cookie 等...我错了吗?

And*_*ely 18

您可以使用session.headers( doc ) 属性来指定随每个请求发送的标头:

import requests

headers ={'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36'}

s = requests.session()
s.headers = headers       # <-- set default headers here

r = s.get('https://www.barchart.com/')
print(r.status_code)
print(s.headers)
print('-' * 80)
r = s.get('https://www.barchart.com/futures/quotes/CLQ20')
print(r.status_code)
print(s.headers)

s.close()
Run Code Online (Sandbox Code Playgroud)

印刷:

200
{'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36'}
--------------------------------------------------------------------------------
200
{'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36'}
Run Code Online (Sandbox Code Playgroud)

  • @jimbasquiat恐怕不行,“requests”不会自动修改标头,您需要手动设置它们。仅自动设置 cookie。 (2认同)