我正在尝试创建一个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)
答案 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"
最有可能应该这样做。