如何全局设置请求“用户代理”标头

时间:2018-09-25 12:00:19

标签: python python-requests

我想在全局范围内设置请求的“用户代理”标头,但是我找不到任何方法,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您可以改为在requests.Session()中设置全局标头:

s = requests.Session()
s.headers['User-Agent'] = 'My Browser'
s.get('http://...') # requests sent from this session will all have this User-Agent header

有关更多详细信息,请参见requests.Session的{​​{3}}。

或者,如果要将全局标头应用于不是通过会话发出的请求,则可以改用以下包装器:

import requests
import inspect

def override_headers(self, func, global_headers):
    def wrapper(*args, **kwargs):
        bound = sig.bind(*args, **kwargs)
        bound.apply_defaults()
        headers = bound.arguments.get('headers')
        if headers:
            bound.arguments['headers'] = {**headers, **global_headers}
        return func(*bound.args, **bound.kwargs)

    sig = inspect.signature(func)
    return wrapper

requests.request = override_headers(requests.request, {'User-Agent': 'My Browser'})

以便所有请求(包括GET,POST等)都将与指定的标头一起发送。

答案 1 :(得分:1)

您也可以对 default_user_agent 进行猴子补丁,如下所示:

from requests import utils
DEFAULT_USER_AGENT = 'My Agent'
utils.default_user_agent = lambda: DEFAULT_USER_AGENT

当请求来自外部包并且您不想修改包的源代码时,此方法很有用。