【发布时间】:2016-10-27 04:47:27
【问题描述】:
我正在使用 Python 和请求抓取一些内部页面。我已关闭 SSL 验证和警告。
requests.packages.urllib3.disable_warnings()
page = requests.get(url, verify=False)
在某些服务器上,我收到一个我无法通过的 SSL 错误。
Traceback (most recent call last):
File "scraper.py", line 6, in <module>
page = requests.get(url, verify=False)
File "/cygdrive/c/Users/jfeocco/VirtualEnv/scraping/lib/python3.4/site-packages/requests/api.py", line 71, in get
return request('get', url, params=params, **kwargs)
File "/cygdrive/c/Users/jfeocco/VirtualEnv/scraping/lib/python3.4/site-packages/requests/api.py", line 57, in request
return session.request(method=method, url=url, **kwargs)
File "/cygdrive/c/Users/jfeocco/VirtualEnv/scraping/lib/python3.4/site-packages/requests/sessions.py", line 475, in request
resp = self.send(prep, **send_kwargs)
File "/cygdrive/c/Users/jfeocco/VirtualEnv/scraping/lib/python3.4/site-packages/requests/sessions.py", line 585, in send
r = adapter.send(request, **kwargs)
File "/cygdrive/c/Users/jfeocco/VirtualEnv/scraping/lib/python3.4/site-packages/requests/adapters.py", line 477, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: SSL_NEGATIVE_LENGTH] dh key too small (_ssl.c:600)
这发生在 Cygwin 内外、Windows 和 OSX 中。我的研究暗示了服务器上过时的 OpenSSL。我正在寻找理想的修复客户端。
编辑: 我能够通过使用密码集来解决这个问题
import requests
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS += 'HIGH:!DH:!aNULL'
try:
requests.packages.urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST += 'HIGH:!DH:!aNULL'
except AttributeError:
# no pyopenssl support used / needed / available
pass
page = requests.get(url, verify=False)
【问题讨论】:
-
您在寻找什么样的修复方法?如果 SSL 证书有问题,您要使用 HTTP 还是继续使用 HTTPS 而忽略该问题?
-
@MarcelWilson:这不是证书的问题。
-
@SteffenUllrich 你当然是对的。如果“SSL”通常有问题,我应该说明一下。
-
将您的代码解决方案移动到答案中将有助于其他人轻松找到解决方案。
标签: python ssl python-requests