python - 使用请求时握手错误

标签 python ssl openssl python-requests sslhandshakeexception

我试图从 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/

相关文章:

python - 强制 IPython 执行当前的多行代码块

python - 如何为每个索引值添加差异行?

Python - 写入文件时出现问题 Errno 2

spring-boot - 带有带有 http/2 和 ssl 的嵌入式 Tomcat 的 Spring Boot 2.1,gzip 不工作

c - OpenSSL- Linux 系统要求

python - 导入错误: No module named deepmolecule. rdkit_utils

ssl - 放心使用 RelaxedHTTPSValidation 和 Java 6 问题

security - 具有cloudera TLS故障的Kafka

c - 如何使用 aes key 创建 .pem 文件

mysql - 如何在 Docker 上使用与 MySQL 的加密连接