首页 > 解决方案 > 为所有请求设置请求默认配置

问题描述

我想为所有请求设置请求默认配置,所以不要这样做:

requests.get(url, headers={...}, timeout=..., proxies=...)

我只是做

requests.get(url)

我确实搜索了它,但没有找到解决方案,我只能想到将请求扩展到这样的类:

import requests
class CustomRequests:
    def __init__(self, **kwargs):
        for k, v in kwargs.items():
            setattr(self, k, v)
    
    def __call__(self, requests_object, *args, **kwargs):
        return requests_object(*args, **kwargs, **self.__dict__)

并且可以这样使用:

Req = CustomRequests(headers={'foo': 'bar'}, proxies={'http': 'baz'}, timeout=15)

print(Req(requests.get, 'https://github.com').status_code)

200

这对我来说听起来像是一个肮脏的黑客来解决这个问题,或者不是?有更好的解决方案吗?

提前致谢。

标签: pythonpython-requests

解决方案


如果您不需要使用会话,例如您只发出一个请求,则可以使用部分

from functools import partial

requests_get = partial(
    requests.get,
    headers=dict(),
    timeout=(0.15, 0.15),
    proxies=[]
)

def some_func(url):
    r = requests_get(url)
    r.raise_for_status()
    return r.json()

推荐阅读