5

我正在尝试使用 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

但是我总是遇到上面提到的相同错误。

有任何想法吗?

4

1 回答 1

9

不幸的是,对于 urllib3,Python 标准库直到 Python 3.2 才添加 SNI 支持。(参见问题 #118 @ urllib3

要在带有 urllib3 的 Python 2.7 中使用 SNI,您需要使用 PyOpenSSL 注入猴子补丁。(参见问题 #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 测试)
于 2013-10-20T12:34:27.270 回答