python: 抓取站点时 sslv3 警报握手失败
python: sslv3 alert handshake failure when scraping a site
我正在使用请求来抓取古腾堡计划
当我这样做时:
import requests
requests.get("https://www.gutenberg.org/wiki/Science_Fiction_(Bookshelf)", verify = True)
我收到错误:
SSLError Traceback (most recent call last)
<ipython-input-33-15981c36e1d3> in <module>()
----> 1 requests.get("https://www.gutenberg.org/wiki/Science_Fiction_(Bookshelf)", verify=True)
/Library/Python/2.7/site-packages/requests/api.pyc in get(url, params, **kwargs)
67
68 kwargs.setdefault('allow_redirects', True)
---> 69 return request('get', url, params=params, **kwargs)
70
71
/Library/Python/2.7/site-packages/requests/api.pyc in request(method, url, **kwargs)
48
49 session = sessions.Session()
---> 50 response = session.request(method=method, url=url, **kwargs)
51 # By explicitly closing the session, we avoid leaving sockets open which
52 # can trigger a ResourceWarning in some cases, and look like a memory leak
/Library/Python/2.7/site-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
463 }
464 send_kwargs.update(settings)
--> 465 resp = self.send(prep, **send_kwargs)
466
467 return resp
/Library/Python/2.7/site-packages/requests/sessions.pyc in send(self, request, **kwargs)
571
572 # Send the request
--> 573 r = adapter.send(request, **kwargs)
574
575 # Total elapsed time of the request (approximately)
/Library/Python/2.7/site-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
429 except (_SSLError, _HTTPError) as e:
430 if isinstance(e, _SSLError):
--> 431 raise SSLError(e, request=request)
432 elif isinstance(e, ReadTimeoutError):
433 raise ReadTimeout(e, request=request)
SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)
这是几天前的工作,我能够抓取页面。我没有更改我的代码中的任何内容。我确实安装了 Heroku 和 Postgres,但我不知道这是否会导致错误。我仍然可以请求 google.com 和其他页面。我正在使用 Python 版本 2.7.10 和 Mac OSX 10.10.5.
如何克服此错误以抓取 gutenberg 页面?我真的不明白这个错误,所以任何帮助将不胜感激。
看起来他们最近(2015 年 9 月 21 日)安装了新的 SSL 证书,并且在这样做时他们一定加强了安全设置,因为该站点只接受 TLS 1.2 连接(不接受您的图书馆正在尝试的 SSLv3使用,也没有 TLS 1.0 或 TLS 1.1)。
查看他们的 SSL 扫描结果 here。
它停止工作的原因与您的代码无关,但事实上他们更改了允许的安全协议并且您的系统(OpenSSL 版本)似乎不支持 TLS 1.2。
尝试升级您计算机上的 OpenSSL 库,然后您应该能够再次连接到该站点(抱歉,我不知道在 Mac 上为 Python 更新 OpenSSL 库的具体细节).
我正在使用请求来抓取古腾堡计划 当我这样做时:
import requests
requests.get("https://www.gutenberg.org/wiki/Science_Fiction_(Bookshelf)", verify = True)
我收到错误:
SSLError Traceback (most recent call last)
<ipython-input-33-15981c36e1d3> in <module>()
----> 1 requests.get("https://www.gutenberg.org/wiki/Science_Fiction_(Bookshelf)", verify=True)
/Library/Python/2.7/site-packages/requests/api.pyc in get(url, params, **kwargs)
67
68 kwargs.setdefault('allow_redirects', True)
---> 69 return request('get', url, params=params, **kwargs)
70
71
/Library/Python/2.7/site-packages/requests/api.pyc in request(method, url, **kwargs)
48
49 session = sessions.Session()
---> 50 response = session.request(method=method, url=url, **kwargs)
51 # By explicitly closing the session, we avoid leaving sockets open which
52 # can trigger a ResourceWarning in some cases, and look like a memory leak
/Library/Python/2.7/site-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
463 }
464 send_kwargs.update(settings)
--> 465 resp = self.send(prep, **send_kwargs)
466
467 return resp
/Library/Python/2.7/site-packages/requests/sessions.pyc in send(self, request, **kwargs)
571
572 # Send the request
--> 573 r = adapter.send(request, **kwargs)
574
575 # Total elapsed time of the request (approximately)
/Library/Python/2.7/site-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
429 except (_SSLError, _HTTPError) as e:
430 if isinstance(e, _SSLError):
--> 431 raise SSLError(e, request=request)
432 elif isinstance(e, ReadTimeoutError):
433 raise ReadTimeout(e, request=request)
SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:590)
这是几天前的工作,我能够抓取页面。我没有更改我的代码中的任何内容。我确实安装了 Heroku 和 Postgres,但我不知道这是否会导致错误。我仍然可以请求 google.com 和其他页面。我正在使用 Python 版本 2.7.10 和 Mac OSX 10.10.5.
如何克服此错误以抓取 gutenberg 页面?我真的不明白这个错误,所以任何帮助将不胜感激。
看起来他们最近(2015 年 9 月 21 日)安装了新的 SSL 证书,并且在这样做时他们一定加强了安全设置,因为该站点只接受 TLS 1.2 连接(不接受您的图书馆正在尝试的 SSLv3使用,也没有 TLS 1.0 或 TLS 1.1)。
查看他们的 SSL 扫描结果 here。
它停止工作的原因与您的代码无关,但事实上他们更改了允许的安全协议并且您的系统(OpenSSL 版本)似乎不支持 TLS 1.2。
尝试升级您计算机上的 OpenSSL 库,然后您应该能够再次连接到该站点(抱歉,我不知道在 Mac 上为 Python 更新 OpenSSL 库的具体细节).