常见问题

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

编码数据?

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

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

自定义用户代理?

请求允许您轻松覆盖用户代理字符串以及任何其他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正式支持python2.7&3.5+和PyPy。

Python2支持?

对!我们目前还没有计划 sunset 我们对Python2.7的支持。我们了解到,我们有一个庞大的用户群,有着不同的需求,我们打算在请求中保持对Python2.7的支持,直到 pip stops supporting Python 2.7 (there's no estimated date on that yet) .

也就是说,是的 高度地 建议用户迁移到Python3.6+,因为从2020年1月1日起,Python2.7不再收到错误修复或安全更新。

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

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

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

python3和python 2.7.9+在其SSL模块中包含对sni的本机支持。有关在python<2.7.9的请求中使用sni的信息,请参阅 Stack Overflow answer .