python - 在一个中心位置全局修改请求
问题描述
我的任务是更新现有的 Python 模块,该模块使用requests
. 也就是说,在这个模块中,至少有 50 种用法requests
来向所述 API 发送请求。
API 发生了变化,要求将标头添加到所有请求中。在手动将标头添加到所有 50 个请求之前,我想知道是否可以定义某种“中间件”(例如在Django中),它可以一次为所有请求添加标头。
这样的事情可能requests
吗?
解决方案
您可以使用包装器对函数进行猴子修补,该包装器使用附加条目requests.request
更新由参数指定的字典。headers
下面是一个示例,它将强制所有请求的标头User-Agent
具有 value My Browser
:
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'})
推荐阅读
- html - 网格中卡片的高度不是动态的
- python - 普通 python 中的类 Django 单元测试数据库
- html - 适用于 Bootstrap 3.0.3 但不适用于 3.3.7 的可折叠侧边栏
- php - strtotime(+1 个月) 和 12 月/明年的行为
- jquery - Angular 5 - 如何在使用 *ngFor 创建 HTML 元素时调用函数
- xml - 如何在 Notes 客户端中使用带有 XML 的 Dojo 数据网格
- windows - 使用 powershell 脚本/命令禁用表面自动旋转
- r - 样本(.)与计算的概率
- c++ - 如何在 C++ 中删除字符串中的表情符号
- concurrency - Perl6 制作一个可观察的计时器