Python服务器特定的SSL认证错误

时间:2018-11-20 01:49:36

标签: python python-3.x ssl python-requests ssl-certificate

我正在尝试从以下地址下载PDF: https://www.sce.com/NR/sc3/tm2/pdf/ce12-12.pdf

我一直在使用这样的请求库:

url = 'https://www.sce.com/NR/sc3/tm2/pdf/ce12-12.pdf'
site = requests.get(url)
with open('outfile.pdf','wb') as outfile:
    outfile.write(site.content)

这周,我开始收到以下SSL错误:

HTTPSConnectionPool(host ='www1.sce.com',port = 443):URL超过最大重试次数:/NR/sc3/tm2/pdf/ce12-12.pdf(由SSLError(SSLError( 1,'[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:645)'),)))

我注意到,当我在Chrome中下载PDF(通过Dev Tools网络监控)时,Web浏览器中的GET请求返回代码302,然后对以下网址发出不同的GET请求:

https://www1.sce.com/NR/sc3/tm2/pdf/ce12-12.pdf

如果我调整上面的代码并使用该URL发出GET请求,则会收到相同的SSL错误。

我使用相同的代码从不同的站点下载不同的PDF,没有错误:

url2 = 'https://www.pge.com/tariffs/assets/pdf/tariffbook/ELEC_SCHEDS_A-1.pdf'
site2 = requests.get(url2)
with open('outfile2.pdf','wb') as outfile:
    outfile.write(site2.content)

我在计算机上更新了SSL,并重新编译了Python以使用更新后的SSL配置。当我在Python中运行此命令时,我得到以下输出:

import ssl
print(ssl.OPENSSL_VERSION)
>>>OpenSSL 1.0.2h  3 May 2016

如果我在请求命令中指定“ verify = False”,则可以获得第一个要下载的URL,但我不希望这样做。

有人对发生的事情有任何见解吗?我认为我的SSL通常可以正常工作,因为第二个HTTPS请求顺利通过了。我认为关于第一个URL处理请求的方式还有其他事情,但是我不确定。我在url和url2之间看到的唯一可区别的区别是url在请求标头中有一个cookie。 url2的请求标头中没有cookie。

我正在运行Python 3.5.2和请求库的2.20.1版本。

谢谢。

0 个答案:

没有答案