常见问题

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

已编码的数据?

Requests 自动解压缩的 gzip 编码的响应体,并在可能的情况下尽可能的将响应内容解码为 unicode.

如果需要的话,你可以直接访问原始响应内容(甚至是套接字)。

自定义 User-Agent?

Requests 允许你使用其它的 HTTP Header 来轻松的覆盖自带的 User-Agent 字符串。

怎么不使用 Httplib2?

Chris Adams 给出了一个很好的总结 Hacker News:

httplib2 是你应该使用 Request 的一个原因,尽管 httplib2 名声在外,但它文档欠佳,而且基本操作要写的代码依旧太多。对于 httplib2 我是很感激的,要写一个现代 HTTP 客户端要跟一吨低级麻烦事打交道,实在是件苦差事。但无论如何,还是直接使用 Requests 吧。Kenneth Reitz 是一个很负责的作者,他能把简单的东西做简单。httplib2 感觉像是一个学术产物,而 Requests 才真的是一个人们可以在生产系统中使用的东西。[1]

免责声明:尽管我名列在 Requests 的 AUTHORS 文件中,但对于 Requests 的优秀状态,我的贡献大约只有 0.0001% 吧。

1. http://code.google.com/p/httplib2/issues/detail?id=96 是一个好例子,这个讨厌的 bug 影响了很多人,有人几个月前就写了一个修正,这个修正很有效,我把它放在一个代码分支中,用它处理了几 TB 的数据都没问题,但它花了一年多才进到主分支中,进到 PyPI 则花了更长时间,所以用到 httplib2 的项目花了很长时间才等到问题的解决。

支持 Python 3 吗?

当然!下面是官方支持的python平台列表:

  • Python 2.6
  • Python 2.7
  • Python 3.3
  • Python 3.4
  • Python 3.5
  • PyPy

"hostname doesn't match" 错误是怎么回事?

SSL certificate verification 发现服务器响应的认证和它认为自己连接的主机名不匹配时,就会发生这样的错误。如果你确定服务器的 SSL 设置是正确的(例如你可以用浏览器访问页面),而且你使用的是 Python 2.6 或者 2.7,那么一个可能的解释就是你需要 Server-Name-Indication。

Server-Name-Indication 简称 SNI,是一个 SSL 的官方扩展,其中客户端会告诉服务器它连接了哪个主机名。当服务器使用虚拟主机( Virtual Hosting)时这点很重要。这样的服务器会服务多个 SSL 网站,所以它们需要能够针对客户端连接的主机名返回正确的证书。

Python 3 和 Python 2.7.9+ 的 SSL 模块包含了原生的 SNI 支持。更多关于在 Request、SNI 以及 Python < 2.7.9 的信息请参见这个 Stack Overflow 答案

Requests is an elegant and simple HTTP library for Python, built for human beings.

doc.iplaypy.com

Receive updates on new releases and upcoming projects.

Other Projects

More Kenneth Reitz projects:

Useful Links

Table Of Contents

Previous topic

身份认证

Next topic

推荐的库和扩展