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

参考

相关推荐
caimouse2 小时前
ReactOS 图形系统分析(16):字符串对象 — STROBJ(string.c)
c语言·开发语言
Aphelios3802 小时前
一次锁内网络IO引发的Tomcat线程池“饿死”事故
java·开发语言·spring boot·elasticsearch·tomcat·网络io阻塞·线程池耗尽
不可求~2 小时前
C++ std::string_view 不是字符串:从悬空引用到安全用法
java·开发语言·c++
90后小陈老师3 小时前
PHP 配置默认值失效排查实录:isset 兜底遇上表单空串回填,首页文案是怎么集体消失的
开发语言·php
JJJennie7774 小时前
Gemini 3.7 Flash 上线,Google 想让 AI 多干活
开发语言·javascript·ecmascript
wuyk5555 小时前
Python 第三章:列表 List
服务器·开发语言·python
Evand J5 小时前
【MATLAB例程,车联网7】CACC网联车辆协同控制:ACC对比、V2X时延丢包与队列稳定性,附例程下载链接
开发语言·matlab·车联网
要努力点6 小时前
Python入门第六课
开发语言·python
萧瑟余晖6 小时前
Java深入解析篇三十三之消息队列
java·开发语言