gpt4 book ai didi

python - 使用前置和后置方法调用装饰请求模块调用

转载 作者:行者123 更新时间:2023-11-28 19:01:18 24 4
gpt4 key购买 nike

我有一个名为 Client 的类,它使用 requests 模块与服务进行交互。它有如下方法:

def get_resource(self, url, headers):
response = requests.get(url, headers, auth=self.auth)
return response

现在我想在每次调用请求模块之前和之后调用一些方法。像这样的东西:

def get_resource(self, url, headers):
self.add_request_header(headers)
response = requests.get(url, headers, auth=self.auth)
self.process_response_headers()
return response

我很难找到一种无需重写所有 Client 方法即可执行此操作的方法。最直接的方法是将对请求模块的调用更改为对自身的调用,并将调用添加到那里的方法。

def get_resource(self, url, headers):
response = self.__get(url, headers, auth=self.auth)
return response

def __get(self, headers, auth):
self.add_request_header(headers)
response = requests.get(url, headers, auth=self.auth)
self.process_response_headers()
return response

但这需要我更改请求模块的所有调用站点和复制功能。我曾尝试使用装饰器将这些方法调用添加到请求模块函数中,但对如何将自身传递给装饰器感到困惑。

我确信在 Python 中有一种优雅的方法可以做到这一点。

最佳答案

您可以使用猴子补丁。读这个:Python: Monkeypatching a method of an object

    import requests
def get(self, url, params=None, **kwargs):
self.add_request_header(self.headers)
response = requests.get(url, self.headers, auth=self.auth)
self.process_response_headers()
setattr(requests.Session, 'get', requests.Session.get)
s = requests.Session()

关于python - 使用前置和后置方法调用装饰请求模块调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52369301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com