详细错误信息:
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认证