常见问题 — 请求文档

来自菜鸟教程
Requests/docs/latest/community/faq
跳转至:导航、​搜索

经常问的问题

文档的这一部分回答了有关请求的常见问题。

编码数据?

请求会自动解压缩 gzip 编码的响应,并尽可能将响应内容解码为 unicode。

当安装了 brotlibrotlicffi 包时,请求也会解码 Brotli 编码的响应。

如果需要,您还可以直接访问原始响应(甚至套接字)。


自定义用户代理?

Requests 允许您轻松覆盖 User-Agent 字符串以及任何其他 HTTP 标头。 请参阅有关标题 文档。


为什么不是 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 的信息,请参阅此堆栈溢出答案 .