前言 在项目开发中,碰到一个问题,使用QNetworkAccessManager类对象发送https请求时,状态码一直返回0,抓包分析看请求响应也是正常的。费了好大劲终于搞定了,主要是两个原因导致的。 原因一:未设置支持SSL/TLS协议 默认是不支持https协议的,需要在代码中手动设置下 QNetworkRequest reqDownloadPackage; reqDownloadPackage.setUrl(QUrl("https://www.baidu.com"));
// 设置支持Https请求
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
// 设置tls协议自动协商
config.setProtocol(QSsl::AnyProtocol);
// 设置不校验对端证书
config.setPeerVerifyMode(QSslSocket::VerifyNone);
reqDownloadPackage.setSslConfiguration(config);
// 发送get请求
QNetworkAccessManager *managerDownloadPackage = new QNetworkAccessManager(this);;
managerDownloadPackage->get(reqDownloadPackage);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 原因二:QT版本太低,不支持高版本SSL/TLS协议 如果按照以上方法设置后,状态码还是0,那就是Qt版本太低了,不支持高版本的SSL/TLS协议,只能切换Qt版本。 建议使用Qt5.9以上的版本。 参考 Qt中https请求返回总是空值问题 Qt之SSL问题
标签:Qt,reqDownloadPackage,SSL,https,config,QNetworkAccessManager From: https://blog.51cto.com/u_15319978/8475550