具有 HTTP 标头受控排序的 Python HTTP 请求

use*_*689 7 python rest http webservices-client

我正在用 python 编写一个连接到 Restful Web 服务的客户端接口,不幸的是,该 Web 服务需要请求中存在自定义标头。我一直在使用 Requests 来实现此目的,但是 Web 服务还要求标头在请求中按特定顺序排列。我无法弄清楚请求如何对标头进行排序,并查看是否有办法能够控制此排序。

如果有人有建议,我也愿意在我的应用程序中使用除请求之外的其他模块。

mic*_*yer 3

您可以尝试使用该类OrderedDict来存储标头,而不是请求的默认标头:

>>> from collections import OrderedDict
>>> from requests import Session
>>> s = Session()
>>> s.headers
CaseInsensitiveDict({'Accept-Encoding': ... 'User-Agent': ... 'Accept': '*/*'})
>>> s.headers = OrderedDict([('User-Agent', 'foo-bar'), ('Accept', 'nothing')])
>>> s.headers
OrderedDict([('User-Agent', 'foo-bar'), ('Accept', 'nothing')])
Run Code Online (Sandbox Code Playgroud)

  • `s.headers = OrderedDict(..)` 是当前的答案。这是[另一个代码示例(俄语文本)](https://ru.stackoverflow.com/a/722145/23044)。如果您愿意,您也可以更新您的答案。 (2认同)
  • 如果将 OrderedDict 传递给 headers 关键字参数,则会提供排序。但请求使用的默认标头的顺序将是首选,这意味着如果您覆盖 headers 关键字参数中的默认标头,则与该关键字参数中的其他标头相比,它们可能会出现乱序。如果出现问题,用户应考虑通过将 Session 设置为自定义 OrderedDict 来设置 Session 对象上的默认标头。该顺序将始终是首选。https://requests.kennethreitz.org/en/master/user/advanced/#header-ordering (2认同)