2024-05-23 20:03:55 发布
网友
标题说明了一切:有没有一种“最好”的方式总是在每个请求中添加一个头?我有一个内部工具,它想把请求id发送给其他内部工具;我正在寻找一个好的解决方案。我浏览了这两本书的文档,似乎这不是一个很受欢迎的要求,因为我找不到烹饪书的例子。在
我在想几个解决方案:
import requests
import myrequestswrapper as requests
编辑:为什么我不考虑请求。会话:它存储Cookie,需要在保持连接打开时进行处理。在
创建一个session object,这是advanced usage下面显示的第一件事:
s = requests.Session() s.headers.update({'x-some-header': 'the value'}) s.get('http://httpbin.org/headers')
并使用会话执行请求。如您所述,您不希望在请求之间持久化cookies,您可以将Session子类化:
Session
不幸的是,Session在设计上很难扩展和配置,所以“禁用”cookie和像这样修改池是一种黑客行为,并且在{}更新一点点的时候很容易被破坏。此外,我们还禁用了Session的两个主要功能,仅用于持久化头。在
包装基本API方法可能是更干净、更安全的方法:
# customrequests.py from functools import wraps from requests import api as requests_api custom_headers = {} def _header_wrapper(f): @wraps(f) def wrapper(*args, **kwgs): headers = kwgs.pop('headers', None) or {} headers.update(custom_headers) return f(*args, headers=headers, **kwgs) return wrapper request = _header_wrapper(requests_api.request) get = _header_wrapper(requests_api.get) options = _header_wrapper(requests_api.options) head = _header_wrapper(requests_api.head) post = _header_wrapper(requests_api.post) put = _header_wrapper(requests_api.put) patch = _header_wrapper(requests_api.patch) delete = _header_wrapper(requests_api.delete)
实际操作:
In [1]: import customrequests as requests In [2]: print(requests.get('http://httpbin.org/headers').text) { "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.11.1" } } In [3]: requests.custom_headers['X-Test'] = "I'm always here" In [4]: print(requests.get('http://httpbin.org/headers').text) { "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Host": "httpbin.org", "User-Agent": "python-requests/2.11.1", "X-Test": "I'm always here" } }
创建一个session object,这是advanced usage下面显示的第一件事:
并使用会话执行请求。如您所述,您不希望在请求之间持久化cookies,您可以将
^{pr2}$Session
子类化:不幸的是,}更新一点点的时候很容易被破坏。此外,我们还禁用了
Session
在设计上很难扩展和配置,所以“禁用”cookie和像这样修改池是一种黑客行为,并且在{Session
的两个主要功能,仅用于持久化头。在包装基本API方法可能是更干净、更安全的方法:
实际操作:
相关问题 更多 >
编程相关推荐