zoukankan      html  css  js  c++  java
  • 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用法

    生成请求(request)

    1、导入urllib3模块

    2、需要一个PoolManager示例来生成请求,由该实例对象处理与线程池的连接以及线程安全的所有细节,不需要任何人为操作:

    3、通过request()方法创建一个请求:

    查看request()方法源码:

    def request(self, method, url, fields=None, headers=None, **urlopen_kw):
    
    • 第一个参数method 必选,指定是什么请求,'get'、'GET'、'POST'、'post'、'PUT'、'DELETE'等,不区分大小写。
    • 第二个参数url,必选
    • 第三个参数fields,请求的参数,可选
    • 第四个参数headers 可选

    request()方法返回一个HTTPResponse对象。
    可通过dir()查看所有属性和方法

    dir(r)
    
    只截取了一部分
    #'data', 'decode_content', 'enforce_content_length', 'fileno', 'flush', 'from_httplib',
    # 'get_redirect_location', 'getheader', 'getheaders', 'headers', 'info', 'isatty',
    # 'length_remaining', 'read', 'read_chunked', 'readable', 'readinto', 'readline',
    # 'readlines', 'reason', 'release_conn', 'retries', 'seek', 'seekable', 'status',
    # 'stream', 'strict', 'supports_chunked_reads', 'tell', 'truncate', 'version', 'writable',
    # 'writelines']
    

    可以通过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。

    转载:https://www.cnblogs.com/KGoing/p/6146999.html

  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12790439.html
Copyright © 2011-2022 走看看