常见问题

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

编码数据?

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

当任何一个 brotlibrotlicffi 包安装后,请求还会对Brotli编码的响应进行解码。

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

自定义用户代理?

请求允许您轻松覆盖User-Agent字符串以及任何其他HTTP头。看见 documentation about headers

为什么不是httplib2?

克里斯·亚当斯对 Hacker News

httplib2是您应该使用请求的一部分:它作为客户机更受尊重,但没有很好的文档记录,而且对于基本操作仍然需要太多的代码。我很感激httplib2所做的,在构建一个现代的HTTP客户机时,存在大量的低级困难,但实际上,只是使用请求。Kenneth Reitz非常积极,他得到了简单事物应该简单的程度,而httplib2更像是一个学术练习,而不是人们应该用来构建生产系统的东西[1]。

披露:我在请求作者文件中列出了,但我可以为大约0.0001%的敬畏申请信用。

1。http://code.google.com/p/httplib2/issues/detail?ID=96是一个很好的例子:一个影响很多人的令人讨厌的bug,有一个修复方法可以用几个月,当我把它应用到一个复刻中,并通过它重击几个TB的数据时,效果很好,但是它花了一年多的时间才进入主干,甚至更长的时间才进入到Pypi中,在Pypi中,任何其他需要“httplib2”的项目都可以工作。NG版本。

python 3支持?

是!Requests官方支持Python3.8+和PyPy。

Python2支持?

不是的!从请求2.28.0开始,请求不再支持Python2.7。无法迁移的用户应锁定到 requests<2.28. Full information can be found in psf/requests#6023

它是 highly 建议用户现在迁移到Python3.8+,因为从2020年1月1日起,Python2.7不再接收错误修复或安全更新。

什么是“主机名不匹配”错误?

这些错误发生在 SSL certificate verification 无法匹配服务器对其认为正在联系的主机名请求作出响应的证书。如果您确定服务器的SSL设置是正确的(例如,因为您可以使用浏览器访问该站点),并且您使用的是python 2.7,那么可能的解释是您需要服务器名称指示。

Server-Name-Indication sni是ssl的官方扩展,客户机告诉服务器它正在联系的主机名。这在服务器使用时很重要 Virtual Hosting . 当这些服务器托管多个SSL站点时,它们需要能够根据客户机连接的主机名返回适当的证书。

Python3已经在他们的SSL模块中包含了对SNI的原生支持。