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以上的版本。

参考

相关推荐
软件黑马王子8 小时前
14.事件中心:主要作用和原理
开发语言·前端框架·c#
君顾18 小时前
酒吧点餐小程序系统开发实战:从架构设计到上线全流程指南
java·开发语言·酒吧
Quz8 小时前
QML Loader:从文件加载组件、加载内联组件
qt
Quz8 小时前
QML Loader: 状态监听与动态标签页
qt
似水এ᭄往昔9 小时前
【Qt】--常用控件(显示类控件)
开发语言·qt
PHP实战开发录9 小时前
PHP文件上传成功为什么页面却找不到
开发语言·nginx·php·开发
云小逸10 小时前
C++ 第一阶段:对象、内存与生命周期
开发语言·c++
玖玥拾10 小时前
Lua 基础语法(二)
开发语言·unity·lua
王的宝库10 小时前
GO常用标准库包
开发语言·后端·golang
geovindu10 小时前
python: Face Recognition
开发语言·后端·python·人脸识别