自动将标头添加到python请求请求

时间:2017-03-28 11:11:25

标签: python python-requests

我正在尝试创建一个rest api客户端,用于与我们的某个服务进行通信。每个请求都需要包含一个授权标题,该标题会受到大纪元时间,请求动词,数据,路径等的影响。

我正在尝试尽可能无缝地使用python请求模块,但我不确定将标头“注入”每个请求的最佳方法。

请求中似乎存在“钩子”的概念,但目前只有“响应”钩子。

我正在考虑扩展Session对象并覆盖“send”方法,添加标头然后将其传递给super(Session.send)方法。

我的Python在OOP和继承方面并不是很棒,但这是我尝试过的

 class MySession(Session):
    def __init__(self, access_id=None, access_key=None):
        self.access_id = access_id
        self.access_key = access_key
        super(MySession, self).__init__()

    def send(self, request, **kwargs):
        method = request.method
        path = urlparse(request.url).path

        request.headers['Authorization'] = self.__create_security_header(method, path)
        request.headers['Content-Type'] = "application/json"

        return Session.send(self, request, **kwargs)

1 个答案:

答案 0 :(得分:1)

我猜你不需要覆盖send方法,因为你已经覆盖了__init__

class MySession(Session):

    def __init__(self, access_id=None, access_key=None):
        super(MySession, self).__init__()
        self.access_id, self.access_key = access_id, access_key

        # provided __create_security_header method is defined
        self.headers['Authorization'] = self.__create_security_header(method, path)
        self.headers['Content-Type'] = "application/json"

最有可能应该这样做。