我想在全局范围内设置请求的“用户代理”标头,但是我找不到任何方法,有人可以帮助我吗?
答案 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
当请求来自外部包并且您不想修改包的源代码时,此方法很有用。