如何全局设置请求“user-agent”标头

ben*_*usi 5 python python-requests

我想全局设置请求“用户代理”标头。但我找不到任何方法来做到这一点。谁能帮我?

blh*_*ing 6

您可以改为设置全局标头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
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅requests.Session的文档。

或者,如果您想将标头全局应用于不是从会话发出的请求,则可以使用以下包装器:

import requests
import inspect

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

    sig = inspect.signature(func)
    return wrapper

requests.request = override_headers(requests.request, {'User-Agent': 'My Browser'})
Run Code Online (Sandbox Code Playgroud)

这样所有请求,包括 GET、POST 等,都将使用指定的标头发送。


小智 6

您还可以猴子修补default_user_agent,如下所示:

from requests import utils
DEFAULT_USER_AGENT = 'My Agent'
utils.default_user_agent = lambda: DEFAULT_USER_AGENT
Run Code Online (Sandbox Code Playgroud)

当请求是从外部包发出并且您不想修改包的源代码时,此方法非常有用。