我正在尝试从以下地址下载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版本。
谢谢。