python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

报错信息

 

python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

过程

测试1

不指定headers时GET:

 

python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

 

python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

测试2

当指定headers的User-Agent为火狐浏览器时:

 

python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

 

python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

分析

现象:第一次GET时正常,第二次GET时,会报错.

不同点:User-Agent不相同

分析:由于报错SSL证书验证失败,所以这次的访问应该是https协议.但是我们明明使用的是http,所以,猜测访问该网站后,被重定向到了https://www.baidu.com/

验证

首先,进行GET时,关闭证书验证.因为,如果不关闭,请求总是失败,不能获取到重定向的信息.

 

python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

 

python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

当不指定User-Agent时

 

python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

 

python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool

结论

当指定headers的User-Agent时,baidu的服务器会重定向到https的网址.因此报出SSL验证失败的错误.

解决方法

方法1:

在进行GET时,指定SSL证书.详情见附件

方法2:

关闭证书验证. 详情见附件