Logo
Section 1 / 8

深入探究

了解HTTP网络服务并理解选用httplib2的原因

导入

深入探究

了解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协议本身。

序列化 Python 对象

HTTP 的特性 1. 简单快速:客户端向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、POST 等;每种方法规定了不同的操作类型,使得通信更快捷。 2. 灵活:HTTP 允许传输任意类型的数据对象。传输的报文类型由 Content-Type 头部字段来定义,因此 HTTP 可以支持文本、图片、音频、视频等多种数据格式。 3. 无连接:HTTP 是无连接的,即每次请求完成后,连接就会关闭。这减少了服务器的开销,提高了效率。但为了提升性能,HTTP/1.1 引入了持久连接(Keep-Alive)机制,允许在同一个连接上发送多个请求。 4. 无状态:HTTP 协议本身是无状态的,即服务器不会保存客户端的任何信息。每个请求都是独立的,服务器不记得之前发生过什么。如果需要保持状态,通常通过 Cookie 或 Session 机制实现。 5. 支持多种请求方法:HTTP 定义了多种请求方法,如 GET、POST、PUT、DELETE、HEAD、OPTIONS 等,用于表示对资源的不同操作。 6. 可扩展性:HTTP 协议支持自定义头部字段和扩展功能,允许开发者根据需求添加新的功能或协议扩展。 7. 缓存支持:HTTP 支持缓存机制,可以通过 Cache-Control、Expires 等头部字段控制资源的缓存行为,提高访问速度并减少网络负载。 8. 安全性:虽然原始 HTTP 不加密,但通过 HTTPS(HTTP over TLS/SSL)可以实现安全通信,保护数据的机密性和完整性。 9. 基于请求-响应模型:HTTP 采用请求-响应模式,客户端发送请求,服务器返回响应,整个过程清晰明确。 10. 跨平台兼容性:HTTP 是一种基于 TCP/IP 的应用层协议,可在各种操作系统和设备上运行,具有良好的跨平台兼容性。