5

我正在使用 Requests 2.0.0 并未能使用以下方法完成 https GET 请求:

requests.get('https://backend.iddiction.com/rest/v1/s2s/confirm_install?apphandle=slotsjourneyofmagic&appsecret=5100d103e146e2c3f22af2c24ff4e2ec&mac=50:EA:D6:E7:9B:C2&idfa=134DA32A-A99F-4864-B69E-4A7A2EFC6C25')

我得到这个错误:

[Errno 8] _ssl.c:504: EOF occurred in violation of protocol.

我在网上和这个网站上阅读了很多内容,但我读到的每一个地方都说这些问题在 2.0.0 版中已修复。

有人可以在这里建议吗?

4

1 回答 1

11

服务器要求您使用 SNI,这在 Python 2.x 中通常不可用。

如果您在浏览器中打开该 URL 并使用 Wireshark 跟踪 TLS 握手,您可以看到 Chrome 提出了服务器名称,并且远程服务器使用它来确定要使用的证书。

要在 Requests 中进行这项工作,您可以使用 Python 3,它包括 SNI 支持以及 Requests 将透明地使用,或者您可以在 Python 2.x 中的 Requests from this answer中安装 SNI 所需的依赖项:

  • pyopenssl
  • ndg-https客户端
  • pyasn1

这些解决方案中的任何一个都将使您的代码正常工作。

于 2013-10-16T12:38:36.960 回答