我试图从 Internet 和 Python2.7.15cr1 下载 PDF 文件并请求 2.19.1,但我遇到了这个错误:
> Traceback (most recent call last):
> File "download.py", line 5, in <module>
> r = requests.get(url,verify=False)
> File "/home/user/.local/lib/python2.7/site-packages/requests/api.py",
> line 72, in get
> return request('get', url, params=params, **kwargs)
> File "/home/user/.local/lib/python2.7/site-packages/requests/api.py",
> line 58, in request
> return session.request(method=method, url=url, **kwargs)
> File "/home/user/.local/lib/python2.7/site-packages/requests/sessions.py",
> line 512, in request
> resp = self.send(prep, **send_kwargs)
> File "/home/user/.local/lib/python2.7/site-packages/requests/sessions.py",
> line 622, in send
> r = adapter.send(request, **kwargs)
> File "/home/user/.local/lib/python2.7/site-packages/requests/adapters.py",
> line 511, in send
> raise SSLError(e, request=request)
> requests.exceptions.SSLError: HTTPSConnectionPool(host='host', port=443): Max
> retries exceeded with url: /en/files/pdftodownload.pdf
> (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines',
> 'ssl3_read_bytes', 'sslv3 alert handshake failure')],)",),))
我用来尝试下载 PDF 文件的代码是:
import requests
url = 'https://www.gasnaturalfenosa.com/en/files/GasNaturalSDG_ing_2016-2.pdf'
r = requests.get(url, stream=True)
with open('metadata.pdf', 'wb') as fd:
for chunk in r.iter_content(chunk_size=2048):
fd.write(chunk)
如果我尝试使用 curl 下载它,我会遇到同样的错误。 几天来我一直在尝试修复这个错误,所以如果有人能告诉我为什么会发生这种情况,我将不胜感激!!
提前致谢!
最佳答案
此服务器已无可救药地损坏。根据SSLLabs report它仅支持 TLS 1.0,并且仅支持使用 DES 或 3DES 的不安全或弱密码。这些密码在请求中默认被禁用。
如果您仍想连接到服务器,您明确需要允许弱 3DES 密码。如 Requests failing to connect to a TLS server 中所述这是这样工作的:
import requests
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'DES-CBC3-SHA'
resp=requests.get('https://www.gasnaturalfenosa.com/en/files/GasNaturalSDG_ing_2016-2.pdf')
关于python - 使用请求时握手错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51661796/