每次请求后更新 requests.session() header

update requests.session() header after each request

我正在使用 requests.Session 为 RESTful API 编写一个 python 客户端。 API 在每次请求后生成并 returns 一个新的 CSRFToken。 API 的开发者告诉我我需要像这样更新 session headers:

csrf = session.cookies.get('CSRFToken')
session.headers.update({'x-csrf-token': csrf})

如何在 Session object 处绑定此功能,以便在每次请求后自动调用此功能(也许可以使用一个很好的继承解决方案),这样它就没有在每次请求后由用户调用?

这是您可以执行的操作的最小示例:

import requests

class MySession(requests.Session):
    def __init__(self):
        super().__init__()
        self.headers = dict()
    def get(self, url):
        if (c := self.cookies.get('CSRFToken')):
            self.headers['x-csrf-token'] = c
        return super().get(url, headers=self.headers)


with MySession() as session:
    (r := session.get('https://www.google.com')).raise_for_status()