Python--urllib3库详解

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。

文章来源: blog.csdn.net,作者:轻狂书生FS,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/LookForDream_/article/details/78624594

python3中urllib库_Python--urllib3库详解相关推荐

  1. python怎么横着输出_对python3中, print横向输出的方法详解

    对python3中, print横向输出的方法详解 Python 2 : print打印的时候,如果结尾有逗号,打出来时候不会换行.但是在python3里面就不行了. Python3: 3.0的pri ...

  2. python3中input输入浅谈_详解Python3中的 input() 函数

    详解Python3中的 input() 函数 一.知识介绍: 1.input() 函数,接收任意输入,将所有输入默认为字符串处理,并返回字符串类型: 2.可以用作文本输入,如用户名,密码框的值输入: ...

  3. python中递归函数写法_python递归函数用法详解

    上期我们介绍了函数式编程,这期内容就是关于递归的函数内容,本期还是按照老规矩,给大家进行核心整理,内容通俗易懂,搭配实际应用,以供大家理解. 关于递归: 百度解释:是指函数/过程/子程序在运行过程序中 ...

  4. python3中sort和sorted的区别详解

    sort和sorted的区别 虽然python3中sort()和sorted()都可以用来排序,但二者有以下两个最主要的区别: sort只能应用在列表list上,而sorted可以对所有可迭代的对象进 ...

  5. python中三元运算符_python 三元运算符详解

    python是没有三元描述符的,但是可以通过模拟的实现. 其中一种是: (X and V1) or V2 正常情况下是不会有错误的,但是文章中也提到了,当V1=""时,就会有问题 ...

  6. python中getopt函数_python getopt函数详解

    getopt模块可以帮助脚本解析sys.argv的命令行参数,它遵守和Unix getopt()函数相同的约定,该模块提供两个函数和一个异常. 1. getopt.getopt(args, optio ...

  7. python中getopt函数_python getopt模块详解

    getopt这个函数 就是用来抽取 sys.argv 获得的用户输入来确定执行步骤. getopt是个模块,而这个模块里面又有getopt 函数,所以getopt需要这样这样用. getopt.get ...

  8. tkinter中text属性_python tkinter基本属性详解

    1.外形尺寸 尺寸单位:只用默认的像素或者其他字符类的值!,不要用英寸毫米之类的内容. btn = tkinter.Button(root,text = "按钮")# 设置按钮尺寸 ...

  9. python中tile的用法_python3中numpy函数tile的用法详解

    tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题 ...

  10. python3 urlencode_Python2和Python3中urllib库中urlencode的使用注意事项

    前言 在Python中,我们通常使用urllib中的urlencode方法将字典编码,用于提交数据给url等操作,但是在Python2和Python3中urllib模块中所提供的urlencode的包 ...

最新文章

  1. Unity3D脚本属性
  2. boost.asio包装类st_asio_wrapper开发教程(2014.5.23更新)(一)-----转
  3. 远程ssh shell 脚本 tcgetattr: Inappropriate ioctl for device错误
  4. [转帖]Sqlcmd使用详解
  5. Beta阶段发布说明
  6. Google App Engine Java功能和命名空间API
  7. 产品认知:产品经理进入新公司第一件事该做什么?
  8. 工程造价步骤_史上最全造价工作流程,全了
  9. mysql catalog def_在ArcCatalog里如何连接数据库-百度经验
  10. PowerDesigner显示工具栏
  11. 关于网页背景图怎样自动适应屏幕大小
  12. 网友吐槽12306网站 专家:已接近技术极限
  13. VBA 获取最大行数和最大列数
  14. 打造我们心中永恒的m500
  15. NLP:自然语言处理技术近十年发展技术更迭的简介、案例之详细攻略(持续更新)daiding待更新
  16. logback日志不打印到文件问题深入剖析
  17. 海康大华RTSP转HLS直播
  18. MySQL数据库开发规范
  19. 算法工程师0——算法工程师学习进阶路线
  20. 传感器的低频响应和截止频率

热门文章

  1. NFT 的周期轮转:野生→泡沫→价值回归
  2. codewar题目练习
  3. 我在杭州找实习的那些天
  4. 第四次考核 Jimmy 学徒考核 Linux安装软件 rnaseq上游分析-2 ascp kingfisher数据下载ena Linux高速下载 Linux下载网页内容
  5. 推荐几个java学习网站
  6. 简单理解VIO(二)
  7. 应用商店成恶意APP滋生新温床 190款感染应用让你措不及防
  8. emoji隐藏表情_敢表态 不隐藏!REEBOK REEmoji 系列 秒变“行走的表情包”
  9. 维度诅咒_CEO自我的礼物和诅咒
  10. 关于胶囊之间的动态路由的理解(基于Hinton的胶囊网络)