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

标签 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

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

有什么想法吗?

最佳答案

不幸的是,对于 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/

相关文章:

Python xpath - 在单个操作中从两个不同的子项获取文本

google-app-engine - Google App Engine 应用程序突然停止工作,返回 503

python - 用于科学 Web 应用程序的谷歌云平台架构

wcf - WCF 是否支持 SNI(服务器名称指示)

nginx 使用错误的 ssl 证书

python - 使用 Azure 托管服务标识 (MSI) 连接 Azure SQL Server 数据库

python - 使用 Python beautifulSoup 抓取特定的 dd 项目

python - 如何将数据帧乘以行

google-app-engine - 谷歌应用引擎 : Odd get_by_key_name behavior

Powershell WebClient 放弃遇到 SNI 错误