【问题标题】:macOS Sierra/Python2.7.13 URLError: <urlopen error EOF occurred in violation of protocol (_ssl.c:661)>macOS Sierra/Python2.7.13 URLError: <urlopen error EOF 发生违反协议 (_ssl.c:661)>
【发布时间】:2017-12-18 18:13:27
【问题描述】:

我一直在搜索/尝试可以在 Stack Overflow 上找到的所有内容,但没有任何乐趣。我是 Python 新手,所以我现在为我的无知道歉,但我非常渴望/兴奋地学习。

macOS Sierra v10.12.5 (early 2011)
Python v2.7.13
urllib==1.21.1
urllib2==1498656401.94
urllib3==1.21.1
Homebrew installed

这是我收到的错误:

Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 12:39:47) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "copyright", "credits" or "license()" for more information.
>>> 

Traceback (most recent call last):
  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 
l    ine 154, in urlopen
    return opener.open(url, data, timeout)
  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 
line 429, in open
    response = self._open(req, data)
  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 
line 447, in _open
    '_open', req)
  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 
line 407, in _call_chain
    result = func(*args)
  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 
line 1241, in https_open
    context=self._context)
  File 
"/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", 
line 1198, in do_open
    raise URLError(err)
URLError: <urlopen error EOF occurred in violation of protocol (_ssl.c:661)>
>>>

【问题讨论】:

  • 可能您使用的是非常旧的 OpenSSL 版本(MacOS 预装了 0.9.8,该版本早已过时)并且服务器需要 TLS 1.2 或旧 OpenSSL 版本不支持的密码(如 ECDHE 密码)。如果您提供您尝试访问的服务器的 URL 和 python 中使用的 OpenSSL 版本,则只能说更多,即输出:python -c 'import ssl; print ssl.OPENSSL_VERSION'
  • 不太可能,哈哈:OpenSSL 0.9.8zh 2016 年 1 月 14 日。运行“brew install openssl”....它说警告:openssl 1.0.21 已安装。但是运行您上面提供的行仍然会给我“OpenSSL 0.9.8zh 14 Jan 2016”的输出。
  • 可以并行安装多个 OpenSSL 安装 - 但对于 Python,它是相关的,它在 Python 编译期间链接。见Updating openssl in python 2.7
  • medium.com/@katopz/how-to-upgrade-openssl-8d005554401 一切似乎都在进行中,直到过程的这一部分(当然这是最后): 3. 也许你也需要这个 $ mkdir -p /usr/local /lib $ ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/ $ ln -s /usr/local/opt/openssl/lib/libssl.1.0. 0.dylib /usr/local/lib/ 关闭终端重新打开再查看版本 $ openssl version -a 还是要返回OpenSSL 0.9.8zh
  • 在尝试使用当前 OpenSSL 构建自己的 Python 时遇到的问题不在您最初问题的主题中,而是应该作为一个新问题提出。没有人会期望以后会在 cmets 中找到这些几乎不相关的问题和答案,因此会丢失有价值的信息。

标签: python macos ssl homebrew urlopen


【解决方案1】:

我有两个问题。 @Steffen_Ullrich 上面提供的步骤解决了问题的前半部分。这是后半部分,谢谢@zwer!

Python and 'print ssl.OPENSSL_VERSION' prints wrong version

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多