python的urllib3库(http连接池PoolManager)

    def web_request( self, method, url, body=None, header=None, auth=None ):
        try:
            if body:
                # 创建一个连接池的实例
                http = urllib3.PoolManager(retries=3,timeout=10,num_pools=200,maxsize=200)
                # 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 / a
                # 和http: // aaa.com / b是会共用一个池子的
                # 4.maxsize: 一个池子缓存的最大连接数量.没有超过最大链接数量的链接都会被保存下来.在block为false的情况下,
                # 添加的额外的链接不会被保存一般多用于多线程之下, 一般情况是设置为和线程数相等的数量, 保证每个线程都能访问一个链接.
                # 5.还有一个参数是block, 默认为False, 如果线程数量大于池子最大链接数量.这时设置block为true, 则会阻塞线程, 因为线程会等其他线程使用完链接,
                # 如果设置为False, 则不会阻塞线程, 但是会新开一个链接.有一个弊端是, 使用完之后这个链接会关闭, 所以如果
                # 多线程经常建立链接会影响性能, 多占用多余的资源


                # 创建一个请求
                response = http.request(method=method,
                                        url=url,
                                        body=body,
                                        headers={'Content-Type': 'application/json',
                                                'Authorization': auth})
            # 如果是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"}))

            else:
                response = urllib3.PoolManager().request(method=method,
                                                         url=url,
                                                         headers={'Content-Type': 'application/json',
                                                                  'Authorization': auth})
            if response.status == 200 and response.data:
                try:
                    result = json.loads(response.data)
                    return result
                except Exception as e:
                    logging.info(f'response data {response.data} is not json format', exc_info=True)
                    return response.data
        except Exception:
            logging.error(f'error in web_request method:{method} url:{url} body:{body}')
        return None
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值