如何在Python与Qt环境中禁用SSL证书验证?
用PyQt实现忽略SSL证书验证的HTTPS请求
要实现类似curl --insecure的效果,即跳过SSL证书验证,你可以通过两种方式修改PyQt的网络请求配置:
方法一:直接设置请求的SSL配置
修改请求对象的SSL配置,将证书验证模式设为VerifyNone,强制跳过证书校验:
def init_request(self): req = QtNetwork.QNetworkRequest(QtCore.QUrl('https://some-site.com')) # 获取默认SSL配置并修改验证模式 ssl_config = QtNetwork.QSslConfiguration.defaultConfiguration() ssl_config.setPeerVerifyMode(QtNetwork.QSslSocket.VerifyNone) req.setSslConfiguration(ssl_config) self.nam = QtNetwork.QNetworkAccessManager() self.nam.finished.connect(self.handle_response) self.nam.get(req) def handle_response(self, reply): if reply.error() != QtNetwork.QNetworkReply.NoError: print(reply.errorString()) return
方法二:通过sslErrors信号忽略错误
连接QNetworkAccessManager的sslErrors信号,在回调函数中主动忽略所有SSL错误:
def init_request(self): req = QtNetwork.QNetworkRequest(QtCore.QUrl('https://some-site.com')) self.nam = QtNetwork.QNetworkAccessManager() # 绑定SSL错误处理信号 self.nam.sslErrors.connect(self.handle_ssl_errors) self.nam.finished.connect(self.handle_response) self.nam.get(req) def handle_ssl_errors(self, reply, errors): # 忽略所有SSL证书相关错误 reply.ignoreSslErrors() def handle_response(self, reply): if reply.error() != QtNetwork.QNetworkReply.NoError: print(reply.errorString()) return
注意事项
这两种方式都会完全跳过SSL证书验证,和curl --insecure一样存在安全风险,仅建议在测试环境或完全信任的服务器场景下使用,避免被中间人攻击窃取数据。
内容的提问来源于stack exchange,提问作者MapUser
相关产品推荐
相关产品推荐

