【问题标题】:urllib3 on python 2.7 SNI error on Google App EngineGoogle App Engine 上 python 2.7 SNI 上的 urllib3 错误
【发布时间】:2013-10-28 22:09:59
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

  • 不确定这是否是您问题中的拼写错误,但该行应该是 pyopenssl.inject_into_urllib3() — 也就是说,它是函数调用,而不是属性访问。
  • 你完全正确!我的愚蠢错误..经过测试并有效,谢谢:)

标签: python google-app-engine sni urllib3


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2012-11-17
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多