美文网首页python技巧
python的urllib3库(http连接池)

python的urllib3库(http连接池)

作者: 陆_志东 | 来源:发表于2018-07-09 20:31 被阅读0次

    urllib3的简易使用

    禁用urllib3的警告

    urllib3.disable_warnings() # 禁用各种urllib3的警告

    import urllib3
    http = urllib3.PoolManager()  # urllib3的连接池
    res = http.request("GET","http://www.baidu.com")
    print(res.status) # 响应状态码
    print(res.data) # 响应的数据 字节流,需要decode("utf-8") 为unicode类型
    

    连接池参数详解

    1.retry:重试重定向次数,默认次数为3次,如果想要关闭重定向,但是不想关闭重试只需redirect=Flase,如果重定向重试都关闭,retries=False

    2.timeout:超时,可以设置链接超时和读超时
    timeout = urllib3.Timeout(connect=1,read=2)

    3.numpools:池子的数量,假如有10个池子,当你访问第11个ip的时候第一个池子会被干掉,然后建一个
    新的供第11个使用.一个池子是作用于同一个ip下的,即 http://aaa.com/ahttp://aaa.com/b是会共用一个池子的

    4.maxsize:一个池子缓存的最大连接数量.没有超过最大链接数量的链接都会被保存下来.在block为false的情况下,
    添加的额外的链接不会被保存一般多用于多线程之下,一般情况是设置为和线程数相等的数量, 保证每个线程都能访问一个链接.

    5.还有一个参数 是 block ,默认为False,如果线程数量大于池子最大链接数量.这时设置block为true,则会阻塞线程,因为线程会等其他线程使用完链接,如果设置为False,则不会阻塞线程,但是会新开一个链接.有一个弊端是,使用完之后这个链接会关闭,所以如果 多线程经常建立链接会影响性能,多占用多余的资源

    urllib3的生成请求简易示例

    1.导入模块
    import urllib3
    2.创建一个连接池的实例
    http = urllib3.PoolManager(retries=2,timeout=10,num_pools=200,maxsize=200)
    3.创建一个请求
    res = http.request("GET","http://www.baidu.com")
    
    如果是GET,HEAD,DELETE请求,你还可以添加url的参数进去
    res = http.request("GET","http://www.baidu.com",fields={"key":"value"})
    如果有中文,get方法会自动的将url转义(urlencode方法)
    
    如果是POST请求,想要给url传递参数,就必须自己进行url转义
    res = http.request("POST","http://www.baidu.com?"+urlencode({"key":"value"}))
    
    你还可以给请求设置请求头
    res = http.request("GET","http://www.baidu.com",fields={"key":"value"},headers = {"content-type":"applaction/json"})
    
    你也可以在发起POST请求时,发送json数据
    data = {"key":"value"}
    json_data = json.dumps(data,ensure_ascii = False)
    res = http.request("POST","url",body=json_data,headers={"content-type":"applaction/json"})
    

    相关文章

      网友评论

        本文标题:python的urllib3库(http连接池)

        本文链接:https://www.haomeiwen.com/subject/obitpftx.html