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

参考

相关推荐
m0_480502641 小时前
Rust 登堂 之 函数式编程(三)
开发语言·后端·rust
eqwaak04 小时前
科技信息差(8.26)
大数据·开发语言·人工智能·编辑器
黑客影儿5 小时前
在Godot中为您的游戏添加并控制游戏角色的完整技术指南
开发语言·游戏·游戏引擎·godot·gdscript·游戏开发·3d游戏
yaoxin5211235 小时前
168. Java Lambda 表达式 - 专用比较器
java·开发语言
shylyly_6 小时前
Linux->多线程3
java·linux·开发语言·阻塞队列·生产者消费者模型
yw00yw7 小时前
常见的设计模式
开发语言·javascript·设计模式
我不是星海7 小时前
RabbitMQ基础入门实战
java·开发语言
jingfeng5148 小时前
C++多态
开发语言·c++
kyle~8 小时前
C/C++---浮点数与整形的转换,为什么使用sqrt函数时,要给参数加上一个极小的小数(如1e-6)
c语言·开发语言·c++
暖苏9 小时前
python-多线程(笔记)(持续更新)
大数据·开发语言·python