【问题标题】:how to use requests.session so that headers are presevred and reused in subsequent get requests如何使用 requests.session 以便在后续的 get 请求中保留和重用标头
【发布时间】:2020-07-20 05:42:47
【问题描述】:

我可能误解了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)

这工作正常并按预期返回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)

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

【问题讨论】:

    标签: python session python-requests


    【解决方案1】:

    您可以使用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()
    

    打印:

    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'}
    

    【讨论】:

    • 谢谢 Andrej,但我想要的是会话标头保留网站设置的 cookie……这怎么可能??
    • @jimbasquiat session 保留cookies,每次请求后尝试print(s.cookies)查看。
    • 但是我怎样才能像手动浏览器一样保留完整的标题?我有一个 x-xsrf-token 的问题,它是由网站在 google chrome 中以某种方式设置的,如果可能的话,我需要能够通过请求重现它......
    • @jimbasquiat 有时cookies是由Javascript设置的——所以你需要手动设置cookies(请求不执行javascript),例如s.cookies['x-xsrf-token'] = ...
    • @jimbasquiat 恐怕不行,requests 不会自动修改标题,您需要手动设置它们。只有 cookie 是自动设置的。
    猜你喜欢
    • 2022-01-09
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多