urllib3 on python 2.7 Google App Engine上的SNI错误

时间:2013-10-20 12:16:53

标签: python google-app-engine sni urllib3

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

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

有什么想法吗?

1 个答案:

答案 0 :(得分:9)

不幸的是,对于urllib3,Python标准库在Python 3.2之前没有添加SNI支持。 (见Issue #118 @ urllib3

要在Python 2.7中使用urllib3中的SNI,您需要使用PyOpenSSL注入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测试)