我正在尝试使用 SNI 从我在 Google App Engine 上托管的网站下载 HTTPS 页面。 无论我使用什么库,我都会收到以下错误:
[Errno 8] _ssl.c:504: EOF occurred in violation of protocol
我已经尝试通过多种方式解决错误,包括使用 urllib3 openssl monkeypatch:
from urllib3.contrib import pyopenssl
pyopenssl.inject_into_urllib3
但我总是得到上面提到的同样的错误。
有什么想法吗?
最佳答案
不幸的是,对于 urllib3,Python 标准库直到 Python 3.2 才添加 SNI 支持。 (参见 Issue #118 @ urllib3)
要在 Python 2.7 中使用 SNI 和 urllib3,您需要使用 PyOpenSSL 注入(inject) monkeypatch。 (参见 Issue #156 @ urllib3)
from urllib3.contrib import pyopenssl
pyopenssl.inject_into_urllib3()
您的问题基本上具有相同的代码,只是它缺少 pyopenssl.inject_into_urllib3()
调用中的括号调用。解决这个问题应该可以解决问题。
您还需要确保具有以下依赖项:
- pyOpenSSL(使用 0.13 测试)
- ndg-httpsclient(使用 0.3.2 测试)
- pyasn1(使用 0.1.6 测试)
关于python - Google App Engine 上的 python 2.7 SNI 错误上的 urllib3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19477214/