常见问题 — 请求文档
经常问的问题
文档的这一部分回答了有关请求的常见问题。
编码数据?
请求会自动解压缩 gzip 编码的响应,并尽可能将响应内容解码为 unicode。
当安装了 brotli 或 brotlicffi 包时,请求也会解码 Brotli 编码的响应。
如果需要,您还可以直接访问原始响应(甚至套接字)。
为什么不是 Httplib2?
Chris Adams 对 Hacker News 做了一个很好的总结:
httplib2 是您应该使用请求的部分原因:它作为客户端更受人尊敬,但没有很好的文档记录,并且它仍然需要太多的基本操作代码。 我很欣赏 httplib2 正在尝试做的事情,在构建现代 HTTP 客户端时存在大量的低级难题,但实际上,只需使用请求即可。 Kenneth Reitz 非常有动力,他知道简单的事情应该简单到什么程度,而 httplib2 感觉更像是一种学术练习,而不是人们应该用来构建生产系统的东西[1]。
披露:我被列在请求 AUTHORS 文件中,但可以声称,哦,大约 0.0001% of 的令人敬畏。
1. http://code.google.com/p/httplib2/issues/detail?id=96 就是一个很好的例子:一个影响很多人的恼人的错误,有一个修复可用数月,效果很好当我将它应用到 fork 中并通过它处理几 TB 的数据时很棒,但是将它放入主干需要一年多的时间,甚至需要更长的时间才能将它放入 PyPI,而任何其他需要“httplib2”的项目都可以运行版本。
Python 3 支持?
是的! Requests 正式支持 Python 2.7 & 3.6+ 和 PyPy。
Python 2 支持?
是的! 我们没有立即计划 日落 我们对 Python 2.7 的支持。 我们知道我们拥有庞大的用户群,需求各不相同,并打算在请求中保持 Python 2.7 支持,直到 pip 停止支持 Python 2.7(目前还没有估计日期)。
也就是说,强烈 建议用户迁移到 Python 3.6+,因为 Python 2.7 自 2020 年 1 月 1 日起不再接收错误修复或安全更新。
什么是“主机名不匹配”错误?
当 SSL 证书验证 无法将服务器响应的证书与请求认为它正在联系的主机名匹配时,就会发生这些错误。 如果您确定服务器的 SSL 设置正确(例如,因为您可以使用浏览器访问该站点)并且您使用的是 Python 2.7,那么可能的解释是您需要 Server-Name-Indication。
Server-Name-Indication 或 SNI,是 SSL 的官方扩展,客户端告诉服务器它正在联系的主机名。 当服务器使用 虚拟主机 时,这一点很重要。 当此类服务器托管多个 SSL 站点时,它们需要能够根据客户端连接的主机名返回适当的证书。
Python3 和 Python 2.7.9+ 在其 SSL 模块中包含对 SNI 的本机支持。 有关在 Python < 2.7.9 上使用带有请求的 SNI 的信息,请参阅此堆栈溢出答案 .