Python--urllib3库详解1


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

         

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

Python--urllib3库详解1的更多相关文章

  1. Python turtle库详解

    Python turtle库详解 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在 ...

  2. Python optparser库详解

    一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库.当然了,不敢说理解的很到位,但是足以应付正常的使用了.废话不多说,开始今天的分享吧. 简介 optparse模块主要用 ...

  3. Urllib3 库详解

    文档:http://urllib3.readthedocs.io/en/latest/

  4. Python爬虫系列-Urllib库详解

    Urllib库详解 Python内置的Http请求库: * urllib.request 请求模块 * urllib.error 异常处理模块 * urllib.parse url解析模块 * url ...

  5. Python 字符串方法详解

    Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息.        ...

  6. python/ORM操作详解

    一.python/ORM操作详解 ===================增==================== models.UserInfo.objects.create(title='alex ...

  7. Python开发技术详解PDF

    Python开发技术详解(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1F5J9mFfHKgwhkC5KuPd0Pw 提取码:xxy3 复制这段内容后打开百度网盘手 ...

  8. Python环境搭建详解(Window平台)

    前言 Python,是一种面向对象的解释型计算机程序设计语言,是纯粹的自由软件,Python语法简洁清晰,特色是强制用空白符作为语句缩进,具有丰富和强大的库,它常被称为胶水语言. Python是一种解 ...

  9. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

随机推荐

  1. MySQL学习记录(不断更新)

    MySQL设置数据集为UTF8仍无法输入中文的解决办法: 我们的机器默认为gbk,因此可在进入数据库之前,使用以下这条语句将默认编码改为gbk,注意没有单引号,也不要用分号. mysql -uroot ...

  2. 走进JavaScript——重拾函数

    创建函数 通过构造器的方式来创建函数,最后一个参数为函数体其他为形参 new Function('a','b','alert(a)') /* function anonymous(a,b) { ale ...

  3. js短路表达式

    今天碰见个题目,感觉短路表达式很好用. 题目: 定义一个计算圆面积的函数area_of_circle(),它有两个参数: r: 表示圆的半径: pi: 表示π的值,如果不传,则默认3.14 funct ...

  4. Selenium_WebDriver_多窗口切换

    摘要: 版权声明:本文为博主原创文章,转载请注明出处. 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时我们如果需要操作新打开的页面,就需要将主机切换到新打开的窗口上再进行操作,比如博客园精华页 ...

  5. java环境搭建 windows

    windows搭建Java环境 1.下载java开发工具jdk安装包 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/inde ...

  6. 基于Java的WebSocket推送

    WebSocket的主动推送 关于消息推送,现在的解决方案如轮询.长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据. 其实推送推送主要讲的是一个推的概念,WebSocket ...

  7. IDEA Default模式下的常用快捷键

    功 能 快 捷 键 备 注 Back Up Ctr + Alt + Left Forword Ctr + Alt + Right Previous Tab Alt + Left Next Tab Al ...

  8. ps色彩范围抠章

    1.在photoshop打开需要抠公章的图像文件2.使用椭圆形选区工具,ALT+SHIFT+鼠标左键,选择章的范围 2.CTRL+J,复制图层,得到图层1,隐藏背景 3.CTRL+L,调整色阶,拖动两 ...

  9. nginx+tomcat单个域名及多个域名配置

    同步首发:http://www.yuanrengu.com/index.php/20171130.html 项目开发接近尾声,开始着手在生产环境部署项目,开发阶段部署项目都没用nginx.项目是采用S ...

  10. 排序算法(Java实现)

    这几天一直在看严蔚敏老师的那本<数据结构>那本书.之前第一次学懵懵逼逼,当再次看的时候,发觉写的是非常详细,非常的好. 那就把相关的排序算法用我熟悉的Java语言记录下来了.以下排序算法是 ...