当前位置:首页 » 《随便一记》 » 正文

ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1129)_SN-Grotesque

8 人参与  2022年04月14日 18:02  分类 : 《随便一记》  评论

点击全文阅读


Python的巨坑

你是不是好奇为什么SSL模块会跳出这个提示?
你是不是好奇为什么网上都只有针对Requests模块中ssl的解决方法?

先看看出现问题的代码,然后我告诉你如何解决

import ssl
import socket

s=ssl.wrap_socket(socket.socket(socket.AF_INET,socket.SOCK_STREAM))
s.connect(("hostname",443))

>>> ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:1129)

解决方法

ssl模块中的wrap_socket方法在Python3.7版本开始就已经被弃用,所以就意味着其实你在使用一个已经被淘汰的方法。
如何解决呢?使用SSLContext.wrap_socket()方法。
# 和上面的代码逻辑是一样的
import ssl
import socket

# 其中server_hostname是你要连接的服务器的域名或IP地址
# 注意,SSLContext这是一个类

hostname="www.a.com"
s=ssl.SSLContext().wrap_socket(socket.socket(socket.AF_INET,socket.SOCK_STREAM), server_hostname=hostname)
#创建一个SSL协议的对象,就像s=socket.socket()
s.connect((hostname,443))
#连接对应的主机和端口号

# ===================我是分隔符=================== #

# 上面的代码你看着晃眼的话也可以这么写

hostname="www.a.com"
# 先定义主机名
context = ssl.SSLContext()
# 实例化对象
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 创建套接字
s = context.wrap_socket(sock, server_hostname=hostname)
# 创建SSL协议对象的套接字
s.connect((hostname, 443))
# 连接对应的主机和端口号
问题解决,是不是很惊讶?你是不是在网上找了好久都没找到真正的解法?
如果这篇文章帮到你了,请一定要留下一个评论!

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/38050.html

你是  模块  对象  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1