错误:Max retries exceeded with url

详细错误信息:
HTTPSConnectionPool(host='***', port=443): Max retries exceeded with url: ******(Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)'),))

问题原因:
http连接太多没有关闭导致的。
http的连接数超过最大限制,默认的情况下连接是Keep-alive的,所以这就导致了服务器保持了太多连接而不能再新建连接。

解决:

  • 关闭多余的连接
import requests

ss = requests.session()
ss.keep_alive = False
  • 使用with语句自动关闭连接
# reqeusts文档:如果你在请求中把 stream 设为 True,Requests 无法将连接释放回连接池,除非你 消耗了所有的数据,或者调用了 Response.close。 这样会带来连接效率低下的问题。如果你发现你在使用 stream=True 的同时还在部分读取请求的 body(或者完全没有读取 body),那么你就应该考虑使用 with 语句发送请求,这样可以保证请求一定会被关闭:
with requests.get('http://httpbin.org/get', stream=True) as r:
    # 在此处理响应。
  • 间隔发送请求

  • 忽略对 SSL 证书的验证(未验证)

import requests
requests.packages.urllib3.disable_warnings()  # 忽略错误(在不影响程序的情况下)
r = requests.get(url, headers=headers, verify=False)  # 忽略ssl认证
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容