urllib3 是一个功能强大且友好的 Python HTTP 客户端。大多数 Python 生态系统已经使用 urllib3,包括 Requests 和 Pip
入门使用
导入模块
1 | import urllib3 |
然后需要一个 PoolManager 实例来发出请求。该对象处理连接池和线程安全性的所有详细信息
1 | http = urllib3.PoolManager() |
生成一个请求
1 | 'GET', 'http://httpbin.org/robots.txt') r = http.request( |
r.data
以字节的形式返回请求的返回数据
常用的返回数据
状态码
1 | 'GET', 'http://httpbin.org/ip') r = http.request( |
返回数据
1 | r.data |
头信息
1 | r.headers |
获取 JSON 结构数据
1 | import json |
字节数据
1 | 'GET', 'http://httpbin.org/bytes/8') r = http.request( |
常用请求方式
添加头信息
1 | r = http.request( |
地址参数
GET, HEAD, DELETE 请求添加地址参数
1 | r = http.request( |
POST, PUT 请求通常需要将参数进行 urlencode 编码
1 | from urllib.parse import urlencode |
表单参数
1 | r = http.request( |
JSON 参数
1 | import json |
文件和字节数据参数
上传文件使用 multipart/form-data
编码并制定文件参数为一个元组,内容为 (file_name, file_data)
1 | with open('example.txt') as fp: |
也可以指定文件的 MIME
类型
1 | r = http.request( |
要发送原始二进制数据,只需指定 body 参数。最好设置 Content-Type 头字段
1 | with open('example.jpg', 'rb') as fp: |
设置超时
单次请求可以设置一个 float 类型的超时时间
1 | http.request( |
也可以使用 Timeout
实例来精准的控制连接超时和读取超时
1 | http.request( |
或者在PoolManager
中设置一个全局的超时配置
1 | 3.0) http = urllib3.PoolManager(timeout= |
重复请求
默认情况下 urllib3 每次请求会会有 3 次重试的机会和 3 次重定向跳转,也可以使用 retries
参数进行设置
比如设置为 10 次
1 | 'GET', 'http://httpbin.org/ip', retries=10) http.requests( |
可以设置 retries=False
来同时关掉重试和重定向
1 | http.request( |
或者只关闭重定向
1 | r = http.request( |
使用 Retry
实例可以分别来控制重试和重定向的次数
比如进行 3 次重试和 2 次重定向
1 | http.request( |
最后同样的可以交给 PoolManager
进行全局配置
1 | False) http = urllib3.PoolManager(retries= |