常见问题解答¶
文档的这一部分回答了有关 Requests 的常见问题。
编码数据?¶
Requests 会自动解压缩 gzip 编码的响应,并尽可能地将响应内容解码为 Unicode。
当安装了 brotli 或 brotlicffi 包时,Requests 还会解码 Brotli 编码的响应。
如果需要,你可以直接访问原始响应(甚至套接字)。
自定义用户代理?¶
Requests 允许你轻松覆盖用户代理字符串以及任何其他 HTTP 标头。请参阅 有关标头的文档。
为什么不使用 Httplib2?¶
Chris Adams 在 Hacker News 上给出了一个精彩的总结
httplib2 是你应该使用 Requests 的原因之一:它作为客户端更加受人尊敬,但文档没有那么完善,而且对于基本操作来说仍然需要太多代码。我赞赏 httplib2 试图做的事情,即在构建现代 HTTP 客户端时存在大量困难的底层问题,但实际上,只需使用 Requests。Kenneth Reitz 非常有动力,他了解简单的事情应该有多么简单,而 httplib2 感觉更像是一项学术练习,而不是人们用来构建生产系统的东西[1]。
披露:我列在 Requests AUTHORS 文件中,但可以宣称功劳,哦,大约 0.0001% 的出色表现。
1. http://code.google.com/p/httplib2/issues/detail?id=96 是一个很好的例子:一个影响许多人的烦人错误,有一个修复程序已经可用数月,当我在一个分支中应用它并通过它处理了几 TB 的数据时,它运行得很好,但花了一年多的时间才进入主干,甚至更长时间才进入 PyPI,在 PyPI 中,任何其他需要“httplib2”的项目都可以获得工作版本。
Python 3 支持?¶
是的!Requests 正式支持 Python 3.8+ 和 PyPy。
Python 2 支持?¶
不!从 Requests 2.28.0 开始,Requests 不再支持 Python 2.7。无法迁移的用户应固定到 requests<2.28。可以在 psf/requests#6023 中找到完整信息。
强烈建议用户现在迁移到 Python 3.8+,因为从 2020 年 1 月 1 日起,Python 2.7 将不再收到错误修复或安全更新。
什么是“主机名不匹配”错误?¶
当 SSL 证书验证 无法匹配服务器响应的主机名时,就会发生这些错误,Requests 认为它正在联系该主机名。如果你确定服务器的 SSL 设置是正确的(例如,因为你可以使用浏览器访问该网站),并且你正在使用 Python 2.7,那么一个可能的解释是你需要服务器名称指示。
服务器名称指示,或 SNI,是 SSL 的官方扩展,其中客户端告诉服务器它正在联系哪个主机名。当服务器使用 虚拟主机 时,这一点很重要。当此类服务器托管多个 SSL 站点时,它们需要能够根据客户端连接到的主机名返回适当的证书。
Python 3 已经在其 SSL 模块中包含了对 SNI 的原生支持。