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. 注册表操作(VC_Win32)

    注册表操作(VC_Win32) 数据类型 注册表的数据类型主要有以下四种:显示类型(在编辑器中)  数据类型  说明 REG_SZ  字符串  文本字符串REG_MULTI_SZ     多字符串   ...

  2. 使用WinInet实现HTTP站点访问

    废话不多说了,直接上代码 HTTP的GET方式代码 void sendGetRequest(LPCTSTR lpszURL) { LPCTSTR lpszAgent = _T("Winine ...

  3. jquery $(document).ready() 与window.onload的区别(转)

    Jquery中$(document).ready()的作用类似于传统JavaScript中的window.onload方法,不过与window.onload方法还是有区别的. 1.执行时间 windo ...

  4. 关于 IO的同步异步间要描述

    IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口. 比如你打开 ...

  5. 不受支持的URL Statue Code 1002

    1. 错误提示: Error description=Error Domain=NSURLErrorDomain Code=-1002 "unsupported URL" User ...

  6. 用最简单的例子实现jQuery图片即时上传

    [http://www.cnblogs.com/Zjmainstay/archive/2012/08/09/jQuery_upload_image.html] 最近看了一些jQuery即时上传的插件, ...

  7. PHP系统左侧菜单栏的管理与实现

    在日常的开发工作中,面对后台的日益增长的业务,以及后期业务的迭代开发,通常会选择添加菜单栏的形式来扩充业务功能,同样日益增长的后台菜单选项也为我们后期的维护,产生了一定的困难性.为此我总结出自己关于左 ...

  8. PowerDesigner 简单应用(转载)

    PowerDesigner是一款功能非常强大的建模工具软件,足以与Rose比肩,同样是当今最著名的建模软件之一.Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesign ...

  9. C#中引用变量是否应该加ref?

    看如下代码:   void Test(T t); void Test(ref T t); 当T是值类型的时候,很好判断,第一种并不能改变方法外变量的值,需要第二种方法才可以.通过查看IL代码,可以看到 ...

  10. 如何使用 window api 转换字符集?

    //宽字符转多字节 std::string W2A(const std::wstring& utf8) { int buffSize = WideCharToMultiByte(CP_ACP, ...