Python--urllib3库详解1html
Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3。Urllib3提供了不少python标准库里所没有的重要特性:python
一、 线程安全git
二、 链接池github
三、 客户端SSL/TLS验证浏览器
四、 文件分部编码上传安全
五、 协助处理重复请求和HTTP重定位测试
六、 支持压缩编码编码
七、 支持HTTP和SOCKS代理url
八、 100%测试覆盖率spa
Urllib3功能很是强大,可是用起来却十分简单:
安装:
Urllib3 能经过pip来安装:
$pip install urllib3
你也能够在github上下载最新的源码,解压以后进行安装:
$git clone git://github.com/shazow/urllib3.git
$python setup.py install
urllib3的使用:
生成请求(request):
首先,你必须导入urllib3模块:
而后你须要一个PoolManager实例来生成请求,由该实例对象处理与线程池的链接以及线程安全的全部细节,不须要任何人为操做:
经过request()方法建立一个请求:
request()方法返回一个HTTPResponse对象。
你还能够经过request()方法向请求(request)中添加一些其余信息,如:
请求(request)中的数据项(request data)可包括:
Headers:
在request()方法中,能够定义一个字典类型(dictionary),并做为headers参数传入:
Query parameters:
对于GET、HEAD和DELETE请求,能够简单的经过定义一个字典类型做为fields参数传入便可:
对于POST和PUT请求(request),须要手动对传入数据进行编码,而后加在URL以后:
Form data:
对于PUT和POST请求(request),urllib3会自动将字典类型的field参数编码成表格类型.
JSON:
在发起请求时,能够经过定义body 参数并定义headers的Content-Type参数来发送一个已通过编译的JSON数据:
Files & binary data:
使用multipart/form-data编码方式上传文件,可使用和传入Form data数据同样的方法进行,并将文件定义为一个元组的形式 (file_name,file_data):
文件名(filename)的定义不是严格要求的,可是推荐使用,以使得表现得更像浏览器。同时,还能够向元组中再增长一个数据来定义文件的 MIME类型:
若是是发送原始二进制数据,只要将其定义为body参数便可。同时,建议对header的Content-Type参数进行设置:
Timeout :
使用timeout,能够控制请求的运行时间。在一些简单的应用中,能够将timeout参数设置为一个浮点数:
要进行更精细的控制,可使用Timeout实例,将链接的timeout和读的timeout分开设置:
若是想让全部的request都遵循一个timeout,能够将timeout参数定义在PoolManager中:
或者
当在具体的request中再次定义timeout时,会覆盖PoolManager层面上的timeout。
请求重试(retrying requests):
Urllib3 能够自动重试幂等请求,原理和handles redirect同样。能够经过设置retries参数对重试进行控制。Urllib3默认进行3次请求重 试,并进行3次方向改变。
给retries参数定义一个整型来改变请求重试的次数:
关闭请求重试(retrying request)及重定向(redirect)只要将retries定义为False便可:
关闭重定向(redirect)但保持重试(retrying request),将redirect参数定义为False便可:
要进行更精细的控制,可使用retry实例,经过该实例能够对请求的重试进行更精细的控制。
例如,进行3次请求重试,可是只进行2次重定向:
若是想让全部请求都遵循一个retry策略,能够在PoolManager中定义retry参数:
或者
当在具体的request中再次定义retry时,会覆盖 PoolManager层面上的retry。
本文参考自:urllib3