【问题标题】:Why does the requests library add extra headers to the ones I set?为什么请求库会在我设置的标题中添加额外的标题?
【发布时间】:2018-06-23 01:30:10
【问题描述】:

当我设置以下自定义标头时,我正在尝试使用 requests 库在 python 上进行发布请求:

User-Agent: MBAM-C
Content-Type: application/json
Authorization: True
Content-Length: 619
Connection: Close

但是,当它发送带有自定义标头的请求时,它会添加自己的标头,这会导致服务器的请求响应错误..

User-Agent: MBAM-C
Accept-Encoding: gzip, deflate
Accept: */*
Connection: Close
Content-Type: application/json
Authorization: True
Content-Length: 559

【问题讨论】:

  • 这些标题都不应该引起问题。唯一奇怪的是内容长度不同。它可能会覆盖您提供的内容,因为它与实际的帖子数据不匹配。

标签: python python-3.x http-headers python-requests


【解决方案1】:

这是由于 requests 项目的设计目标。

此行为已记录在 here。如果库在更正内容长度或添加所需标题时存在问题,您可能希望使用较低级别的库。 Requests 将自己标榜为:“一个优雅而简单的 Python HTTP 库,为人类构建。”其中一部分是宣传它可以接受压缩内容和所有 mime 类型。

注意:自定义标题的优先级低于更具体的信息源。例如:

如果在 .netrc 中指定了凭据,则使用 headers= 设置的授权标头将被覆盖,而 .netrc 又将被 auth= 参数覆盖。 如果您被重定向到主机外,授权标头将被删除。 Proxy-Authorization 标头将被 URL 中提供的代理凭据覆盖。 当我们可以确定内容的长度时,Content-Length 标头将被覆盖

【讨论】:

  • 对我可以使用的其他库有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 2018-04-02
  • 1970-01-01
  • 2017-09-24
  • 2017-02-24
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多