【发布时间】: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