Qt中使用QNetworkAccessManager类发送https请求时状态码返回0

前言

  • 在项目开发中,碰到一个问题,使用QNetworkAccessManager类对象发送https请求时,状态码一直返回0,抓包分析看请求响应也是正常的。费了好大劲终于搞定了,主要是两个原因导致的。

原因一:未设置支持SSL/TLS协议

  • 默认是不支持https协议的,需要在代码中手动设置下
c 复制代码
  	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);

原因二:QT版本太低,不支持高版本SSL/TLS协议

  • 如果按照以上方法设置后,状态码还是0,那就是Qt版本太低了,不支持高版本的SSL/TLS协议,只能切换Qt版本。
  • 建议使用Qt5.9以上的版本。

参考

相关推荐
FQNmxDG4S8 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
前端老石人8 小时前
HTML 字符引用完全指南
开发语言·前端·html
matlab_xiaowang9 小时前
Redux 入门:JavaScript 可预测状态管理库
开发语言·javascript·其他·ecmascript
虹科网络安全9 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje9 小时前
Java语法进阶
java·开发语言·jvm
老前端的功夫10 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_4352879210 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
止语Lab10 小时前
从手动到框架:Go DI 演进的三个拐点
开发语言·后端·golang
yaoxin52112310 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
小短腿的代码世界10 小时前
Qt日志系统深度解析:从qDebug到企业级日志框架
开发语言·qt