EOF occurred in violation of protocol

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:EOF occurred in violation of protocol
  • 本文链接:http://zengrong.net/post/2616.htm

我在使用 requests 的时候频繁遇到下面的错误:

EOF occurred in violation of protocol (_ssl.c:600)

这个错误在 Python2 和 Python3,macOS 和 Ubuntu 下都有出现。从报错信息中可以看出该错误与 HTTPS 握手相关。

这个错误在 这个 issue 中讨论得最为充分。

通过分析,我找到了这个问题产生的原因:在安装 requests 库的时候,没有正确安装 security 包。

下面是解决方案(针对 Ubuntu):

1. 安装支持的 dev 包:

sudo apt-get install libffi-dev libssl-dev python-dev

若不安装上面的包,在安装 requests 的相关支持包的时候,可能会出现下面的错误:

distutils.errors.DistutilsError: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
----------------------------------------
Failed cleaning build dir for cryptography

2. 安装 requests 及其安全支持包

pip install 'requests[security]'

requests[security] 是一个扩展,它会安装下面三个附加的包用来支持安全连接:

  • pyOpenSSL
  • ndg-httpsclient
  • pyasn1

详见 extras_require

参考:

(全文完)