Python请求在外部库中进行配置

时间:2019-07-23 23:36:29

标签: python python-requests

假设我有一个像tableauserverclient这样的库,它使用了请求库中的方法。

现在说我在执行get / post方法时需要设置代理或ignoreSSL。直接用python请求调用这些方法非常简单,但是由于tableauserverclient库调用了这些方法,因此我通常必须更新外部库的源代码才能设置配置。

有没有办法在我的外部库中全局设置请求模块的配置?

1 个答案:

答案 0 :(得分:1)

您可以使用包装函数覆盖requests.request,该包装函数在调用实际的proxies函数之前将缺省值分配给verifyrequests.request参数:

import requests
import inspect

def override(self, func, proxies, verify):
    def wrapper(*args, **kwargs):
        bound = sig.bind(*args, **kwargs)
        bound.apply_defaults()
        bound.arguments['proxies'] = bound.arguments.get('proxies', proxies)
        bound.arguments['verify'] = bound.arguments.get('verify', verify)
        return func(*bound.args, **bound.kwargs)

    sig = inspect.signature(func)
    return wrapper

requests.request = override(
    requests.request,
    proxies={'http': 'http://example-proxy.com', 'https': 'http://example-proxy.com:1080'},
    verify=False
)