Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3。Urllib3提供了很多python标准库里所没有的重要特性:

    1、 线程安全

  2、 连接池

  3、 客户端SSL/TLS验证

  4、 文件分部编码上传

  5、 协助处理重复请求和HTTP重定位

  6、 支持压缩编码

  7、 支持HTTP和SOCKS代理

  8、 100%测试覆盖率

   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参数进行

stream流式响应的处理

>>> import urllib3
>>> http = urllib3.PoolManager()
>>> r = http.request('GET', 'http://httpbin.org/bytes/1024', preload_content=False)
>>> for chunk in r.stream(32):
... print(chunk)
...
>>> r.release_conn()
注意:preload_content=False表示流式处理响应数据。处理stream()方法读取响应数据之外,还可以使用read()方法,示例如下:>>> import urllib3
>>> http = urllib3.PoolManager()
>>> r = http.request('GET', 'http://httpbin.org/bytes/1024', preload_content=False)
>>> r.read(4)
b'\x88\x1f\x8b\xe5'
>>> r.release_conn()

设置:

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。

Python urllib3模块详解相关推荐

  1. python time模块详解

    python time模块详解 转自:http://blog.csdn.net/kiki113/article/details/4033017 python 的内嵌time模板翻译及说明    一.简 ...

  2. Python—requests模块详解

    Python-requests模块详解 来源(博客园@小L小 ):Python-requests模块详解

  3. python re正则_正则表达式+Python re模块详解

    正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns).它本质上是一个小巧的.高度专用的编程语言. 通 ...

  4. python cx_oracle模块详解_cx_Oracle模块详解

    1.安装cx_Oracle模块 1-1.环境准备: 1-1-1.oracle client最小安装 instantclient-sqlplus-linux.x64-11.2.0.4.0 instant ...

  5. Python shutil 模块详解

    Python shutil 模块详解 1.模块介绍 2.copytree 示例 3.move 示例 1.模块介绍 import shutil# copy data from file-like obj ...

  6. Python timeit 模块详解(准确测量小段代码的执行时间)

    timeit 模块详解 -- 准确测量小段代码的执行时间 timeit 模块提供了测量 Python 小段代码执行时间的方法.它既可以在命令行界面直接使用,也可以通过导入模块进行调用.该模块灵活地避开 ...

  7. python爬虫urllib3模块详解

    鉴于urllib请求模块的功能已经无法满足开发者的需求,出现了功能更强大的urllib3模块,urllib3模块是一个第三方的网络请求模块. 安装命令:pip install urllib3 1.发送 ...

  8. Python Tkinter模块详解(后续持续补充)

    声明:该文章是个人学习中写的,目的是总结及当作工具参考,有一定的借鉴成分,后续若有新发现则补充 目录 Tkinter简介 创建组件基本语法 Tkinter组件汇总 Variable 类 常见参数详解 ...

  9. python pexpect模块详解_python pexpect原理详解及使用说明

    pexpect是python中用于实现SSH,FTP,telnet等命令进行自动化交互,从而无需人工干预实现自动化运维的一个第三方扩展模块.理论的描述过于抽象,这里首先设想一下,如果让您设计一个实现自 ...

最新文章

  1. koa连接mysql_CentOS 环境 Node + Koa2 连接 MySQL (ECS系列三)
  2. Uploadify jquery+falsh+UploadHandler.ashx
  3. ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator
  4. ckks方案优化最好的_站群如何优化才能提高SEO效果?站群优化方案有哪些?
  5. linux 备份mbr,MBR的备份与恢复
  6. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框
  7. php获取目录中的所有文件名
  8. 在Eclipse中添加JDK源码包
  9. .NET6正式版将近,70%开发者或面临技术断层!
  10. 史上最全总结!爬虫常见加密解密算法
  11. 带用户名和密码的GitHub链接
  12. php radiobutton,radiobutton怎么用
  13. 使用jquery为table动态添加行的实现代码
  14. 多路复用器_多路复用、非阻塞、线程与协程
  15. vb.net mysql 实例教程_VB.NET数据库编程基础教程(转载
  16. php连接phpmyadmin,怎么访问phpmyadmin
  17. 月末总结之大三大四规划(8.31)
  18. c语言-计算摄氏温度
  19. 根据点、旋转轴、旋转角度,计算点旋转之后的位置
  20. win10怎么改文件后缀_怎么显示win10系统隐藏文件夹

热门文章

  1. JAVA SE 专栏——类和对象
  2. 电路中的原理图中电阻电容的选择
  3. 第四次考核 Jimmy 学徒考核 Linux安装软件 rnaseq上游分析-2 ascp kingfisher数据下载ena Linux高速下载 Linux下载网页内容
  4. mysql访问错误:10061
  5. 【数据结构】前缀树/字典树
  6. JAVA-静态工厂方法
  7. Element tree清空树
  8. 脉脉有钱不任性,强势角逐职场社交
  9. Java报表工具打印方案对比
  10. C语言分享——使用算术运算符进行运算时误差较大