Python与SSL -- 协议违规导致EOF出现
我正在尝试通过Python登录一个网站。我有以下代码:
import sys
sys.path.append('ClientCookie-1.3.0')
import ClientCookie
sys.path.append('ClientForm-0.2.10')
import ClientForm
cookieJar = ClientCookie.CookieJar()
opener = ClientCookie.build_opener(ClientCookie.HTTPCookieProcessor(cookieJar))
opener.addheaders = [("User-agent","Mozilla/5.0 (compatible)")]
ClientCookie.install_opener(opener)
fp = ClientCookie.urlopen("login_page_url")
forms = ClientForm.ParseResponse(fp)
fp.close()
# print forms on this page
for form in forms:
print("***************************")
print(form)
form = forms[2]
form["username"] = "some_username"
form["password"] = "some_password"
fp = ClientCookie.urlopen(form.click())
fp.close()
fp = ClientCookie.urlopen("some_url_for_authorized_users_only")
html = fp.read()
fp.close();
print(html.decode('utf-8'))
输出结果
URLError: <urlopen error [Errno 8] _ssl.c:507: EOF occurred in violation of protocol>
我哪里做错了?这是什么意思?我该如何修复这个错误?
1 个回答
3
看起来你遇到的问题是因为你使用的OpenSSL版本太旧了。
你可以通过下面的命令来检查版本:
$ openssl version -a
还有这个:
$ python -c "import ssl; print ssl.OPENSSL_VERSION"
这两个结果可能不一致。第一个命令显示的是你系统正在使用的版本。如果第二个命令显示的是一个不同的(可能是更旧的)版本,那就说明你的Python没有指向你安装的最新OpenSSL版本。
在我的情况下,第一个结果是0.9~,所以我通过homebrew把OpenSSL升级到了1.0.2k。然后我重新安装了Python,以确保它使用的是更新的版本。
如果你在使用Mac,这个链接是一个很好的参考,可以帮助你升级SSL。此外,你可能还需要参考这个链接,因为较新的OS X系统有更强的安全性,你需要解锁它。