urllib3:使网络请求变得简单易懂
在使用 Python 进行网络编程时,经常用到一些网络请求的操作。随着互联网应用的不断增多,从简单的 HTTP 请求到复杂的 RESTful 接口,需要用到的库也越来越多。其中,urllib3 库就是一个非常强大的 Python 第三方库,它能够帮助我们更加方便快捷地进行网络请求操作。
什么是 urllib3?
urllib3 是 Python 的一个第三方库,它是 Python 标准库 urllib 和 httplib 的完美结合,并为它们提供了一些非常有用的功能扩展。
主要特点包括:
- 连接池管理
- 请求重试
- HTTP(S) 代理支持
- 支持文件上传
- 支持在线文件压缩
- 支持单位换算(比如将字节转成 MB)
安装 urllib3
安装 urllib3 可以通过 pip 进行安装,打开命令行并输入以下命令:
1 | pip install urllib3 |
即可安装 urllib3。
常用方法
urlencode
在urllib3
中,urlencode
是一个用于将字典或元组列表编码为URL查询字符串的工具函数。这个函数可以将提供的参数序列化为符合HTTP规范的URL编码格式。
使用urlencode
函数,你可以将字典或元组列表编码为查询字符串,然后将其添加到URL中以向服务器发送GET请求或POST请求。
下面是urllib3
中urlencode
函数的使用示例:
1 | from urllib.parse import urlencode |
在上面的例子中,我们首先创建了一个名为data
的字典,其中包含了用户名和密码的键值对。然后,我们使用urlencode
函数将这个字典编码为URL查询字符串,并将其存储在encoded_data
变量中。接下来,我们将这个编码后的查询字符串添加到URL中并发送GET请求。最后,我们打印服务器响应的内容。
请注意,urlencode
函数在导入时是从urllib.parse
模块中引入的,而不是直接从urllib3
模块中引入。这是因为urlencode
函数实际上是来自Python内置的标准库urllib.parse
中的函数。
如何使用 urllib3
发送 HTTP 请求
在使用 urllib3 发送 HTTP 请求时,需要创建一个 PoolManager
的对象,通过这个对象来完成请求。具体的代码实现如下所示:
1 | import urllib3 |
这段代码的作用是发送一个 GET 请求,请求百度的网址。执行后我们可以获得到 response 的信息,比如其状态码、响应头、响应体等等信息。
POST 请求
发送 POST 请求时,需要使用到 request()
函数的 body
参数,该参数的内容为一个字符串,表示 POST 请求的数据。例如:
1 | import urllib3 |
HTTPS 支持
urllib3
库通过 Certifi 库提供对 HTTPS 连接的支持。它处理了与 SSL/TLS 握手、证书验证和加密通信等相关的复杂细节,以提供简单易用的 HTTPS 客户端功能。
1 | import urllib3 |
连接池
urllib3 使用连接池来管理 HTTP 请求时建立的连接,这样可以提高请求的效率,减少连接的建立和关闭的开销。如果你需要发送多个请求,就可以使用连接池来重用已经建立好的连接,并发出多个请求。
1 | import urllib3 |
这里创建了一个有 10 个连接池,每个连接池最多可以建立 3 个连接的 PoolManager
对象,通过多线程同时请求百度和 cheneyblog 的网站。可以看到,每个连接池最多只有 3 个连接,这样就可以有效地节约资源。