Python和SSL - EOF违反协议

时间:2014-03-23 13:17:42

标签: python http authentication cookies ssl

我试图通过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 个答案:

答案 0 :(得分:0)

看起来您遇到的问题是由过时版本的OpenSSL引起的。 通过

检查版本
%%b

myfile.text

这些可能不一致。第一个命令显示系统使用的版本。如果您看到第二个命令的不同(可能更旧)版本,这意味着python不会引用您安装的最新openssl。

在我的情况下,第一个结果是0.9~所以我通过自制软件将OpenSSL升级到1.0.2k。然后我重新安装了python以强制执行更新的版本。

如果你使用mac,

howtoupgradessl是升级ssl的一个很好的参考。在这种情况下,您也可能想要引用this,因为新的osx具有更强的安全性,您需要解锁。