资讯专栏INFORMATION COLUMN

关于EOF occurred in violation of protocol (_ssl.c:66

Eirunye / 3769人阅读

摘要:关于的解决办法直接上代码版本报错经过一番查找,发现是不在支持。下面是解决办法,注意版本及以下的如果版本是及以上因为我用的,的解决办法就不写,那个更简单,可以自行网上搜索。

关于EOF occurred in violation of protocol (_ssl.c:661)的解决办法

直接上代码(python版本2.7)
`import requests
r = requests.get("https://www.zjkill.com/news/")
r.encoding = "utf8"
print r.text
print r.status_code,r.url`
报错

requests.exceptions.SSLError: ("bad handshake: SysCallError(-1, "Unexpected EOF")",)
经过一番查找,发现是requests不在支持3DES stream cipher。
下面是解决办法,注意ruquests版本2.11及以下的
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
import ssl

class MyAdapter(HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(num_pools=connections,
                                       maxsize=maxsize,
                                       block=block,
                                       ssl_version=ssl.PROTOCOL_TLSv1)
s = requests.Session()
s.mount("https://", MyAdapter())
r = requests.get("https://www.zjkill.com/news/")
r.encoding = "utf8"
print r.text

如果requests版本是2.12及以上

import requests
                from requests.adapters import HTTPAdapter
                from requests.packages.urllib3.util.ssl_ import create_urllib3_context
                CIPHERS = (
                    "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:"
                    "DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!aNULL:"
                    "!eNULL:!MD5"
                )

                class DESAdapter(HTTPAdapter):
                    """
                    A TransportAdapter that re-enables 3DES support in Requests.
                    """

                    def init_poolmanager(self, *args, **kwargs):
                        context = create_urllib3_context(ciphers=CIPHERS)
                        kwargs["ssl_context"] = context
                        return super(DESAdapter, self).init_poolmanager(*args, **kwargs)

                    def proxy_manager_for(self, *args, **kwargs):
                        context = create_urllib3_context(ciphers=CIPHERS)
                        kwargs["ssl_context"] = context
                        return super(DESAdapter, self).proxy_manager_for(*args, **kwargs)

                s = requests.Session()
                s.mount("https://www.zjkill.com/", DESAdapter())
                r = s.get(url)
                r.encoding = "utf8"
                print r.text

因为我用的python2.7,python3的解决办法就不写,那个更简单,可以自行网上搜索。
附上参考链接Configuring TLS With Requests

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41935.html

相关文章

  • Swoole 源码分析——Server模块之ReactorThread事件循环(下)

    摘要:之后如果仍然有剩余未发送的数据,那么就如果已经没有剩余数据了,继续去取下一个数据包。拿到后,要用函数转化为相应的类型即可得到包长值。 swPort_onRead_check_eof EOF 自动分包 我们前面说过,swPort_onRead_raw 是最简单的向 worker 进程发送数据包的方法,swoole 会将从客户端接受到的数据包,立刻发送给 worker 进程,用户自己把...

    Maxiye 评论0 收藏0
  • Swoole 源码分析——Server模块之初始化

    摘要:如果在调用之前我们设置了,但是不在第二个进程启动前这个套接字,那么第二个进程仍然会在调用函数的时候出错。 前言 本节主要介绍 server 模块进行初始化的代码,关于初始化过程中,各个属性的意义,可以参考官方文档: SERVER 配置选项 关于初始化过程中,用于监听的 socket 绑定问题,可以参考: UNP 学习笔记——基本 TCP 套接字编程 UNP 学习笔记——套接字选项 构造...

    Half 评论0 收藏0
  • Python 的异步 IO:Asyncio 之 TCP Client

    摘要:当被调用时,表示已经断开连接。第三版去掉第三版的目的是去掉。协程保持不变,但是已被剔除不再需要请求发送之后,继续异步等待数据的接收,即。的作用是结束那个导致等待的,这样也就可以结束了结束,以便结束。 关于 Asyncio 的其他文章: Python 的异步 IO:Asyncio 简介 Python 的异步 IO:Aiohttp Client 代码分析 如果不知道 Asyncio 是...

    anonymoussf 评论0 收藏0
  • Java 发送HTTPS请求到非信任网站

    1.Overview HTTPS pages typically use one of two secure protocols to encrypt communications - SSL (Secure Sockets Layer) or TLS (Transport Layer Security).When you request a HTTPS connection to a webpa...

    IamDLY 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<