深入探究
了解HTTP网络服务并理解选用httplib2的原因
从哲学角度来说,我可以用12个词描述HTTP网络服务:仅通过HTTP操作与远程服务器交换数据。若要从服务器获取数据,使用HTTP的GET方法;若要向服务器发送新数据,使用POST方法。一些更高级的HTTP网络服务API还支持使用PUT和DELETE来创建、修改和删除数据。仅此而已。无需注册表、无需消息封装、无需包装器、无需隧道传输。“动词”——HTTP协议内置的GET、POST、PUT和DELETE——直接映射到应用层的数据获取、创建、修改和删除操作。
这种方法的主要优势在于简单性,而这种简洁性已被广泛接受。数据(通常是XML或JSON)可以静态构建和存储,也可以由服务器端脚本动态生成,所有主流编程语言(当然包括Python)都提供了用于下载这些数据的HTTP库。调试也更加容易,因为HTTP网络服务中的每个资源都有唯一的地址(即URL),你可以在浏览器中直接加载并立即查看原始数据。
HTTP网络服务的示例:
- Google Data APIs 允许你与多种Google服务交互,包括Blogger和YouTube。
- Flickr Services 提供上传和下载照片的功能,适用于Flickr平台。
- Twitter API 支持在Twitter上发布状态更新。
- ……以及更多(http://www.programmableweb.com/category/all/apis)
Python 3 自带两个用于与HTTP网络服务交互的库:
http.client是一个底层库,实现了RFC 2616(HTTP协议规范)。urllib.request建立在http.client之上,是一个抽象层,提供访问HTTP和FTP服务器的标准API,能自动处理HTTP重定向,并支持常见的HTTP认证方式。
那么你应该使用哪一个?都不推荐。相反,你应该使用 httplib2,这是一个开源的第三方库,它对HTTP的支持比 http.client 更完整,同时提供的抽象层次又优于 urllib.request。
要理解为什么 httplib2 是正确选择,首先需要理解HTTP协议本身。