QT解决qt.network.ssl问题,最详细的版本(外加解析json数据)

qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
在qt上用QJson解析数据,遇到上面的错误,困扰了几天,最开始时上面的错误报好多类似的问题,反正后来随便捣鼓就变成了上面一个错误了。

  1. 问题
  2. 首先说下我遇到错误后,也差了很多资料,很多人也只是说说将C:\QT\Tools\QtCreator\bin(前面的根据自己的qt安装路径, tools后不变的)文件下的libeay32.dll和ssleay32.dll 复制到…QT\5.12.3\mingw73_64\bin中去就行了,但是事实并不是万能的,我想也不是我的问题,也不是你的问题,也是你碰巧你的程序可以运行了。到这里我就各种排除错误,这里写下我的解决方案。
  3. 首先吧上面的做法先做一遍。不管有没有用,万一有用你就不用看下面了,直接开始你的解析数据就行了。
  4. 万一没用,这里我就推荐先查一下自己qt自带的ssl 的版本是多少。用下面的代码即可。
#include <QSslSocket>
#include "qdebug.h"
// 这个函数也要用对,我有次还用错了函数,弄了半天
qDebug()<< QSslSocket::sslLibraryBuildVersionString();

// 这里我的版本是这个 记住这个版本号
// "OpenSSL 1.0.2p  14 Aug 2018"
  1. 这里就用这个网站上下载对应的版本。这里千万不要追求使用最新版,我之前下载的就是最新版最上面的一个,然后我又没有查询上面的版本,所以苦恼了我一段时间。直接下载1.0.2版本即可。注意安装的时候点击bin目录下。
  2. 下载上面即可
  3. 示例
  4. 然后将C:\Program Files\OpenSSL-Win64\bin目录下的两个文件libcrypto-1_1-x64.dll 和libssl-1_1-x64.dll(1.0.2 版本对应下面的两个文件) 直接拷到E:\QT\5.12.3\mingw73_64\bin这里下,如果你用的mvsc的拷到对应的目录,这个应该懂的。
  5. 在这里插入图片描述
  6. 最后直接运行你的程序,你会发现没有烦恼了。
  7. 在这里插入图片描述
  8. 接下来就考试你的解析数据之旅了。解决问题了内心很快落~~~

总结:

  1. 有些方法可能通过其他人的示例,找到类似的解决方案,上面的解决方法差不多都是将两个文件拷贝到指定的文件夹下,但是可能由于版本的问题,一直折磨你,这时就要有前人之鉴,来解决自己的实际问题,毕竟不是每个人遇到的问题都是一样的,你自己总会要有一定的解决问题的能力。
  2. 我这里也是将我的实际遇到的问题记录下来,因为我遇到这个问题的同时,好像很多人没有版本问题,可能我的运气不好,安装的版本就是兼容,但是每条路都有解决方案的,要相信自己。

解析json数据

  1. 由于上面的代码是我在解析天气预报时遇到的,现在就拿这里做示例。
/// 原始的信息是这样子的。 下面的格式化,可以就到json在线解析
{"results":[{"location":{"id":"WT3Q0FW9ZJ3Q","name":"武汉","country":"CN","path":"武汉,武汉,湖北,中国","timezone":"Asia/Shanghai","timezone_offset":"+08:00"},"now":{"text":"多云","code":"4","temperature":"28"},"last_update":"2020-05-31T18:09:00+08:00"}]}
/// 解析好的格式清晰明了
{
    "results":[
        {
            "location":{
                "id":"WT3Q0FW9ZJ3Q",
                "name":"武汉",
                "country":"CN",
                "path":"武汉,武汉,湖北,中国",
                "timezone":"Asia/Shanghai",
                "timezone_offset":"+08:00"
            },
            "now":{
                "text":"多云",
                "code":"4",
                "temperature":"28"
            },
            "last_update":"2020-05-31T18:09:00+08:00"
        }
    ]
}
  1. 写函数进行解析
void Widget::replyFinished(QNetworkReply *reply)
{
    // qDebug() <<"recv weather data !!";
    QString all = reply->readAll();
    qDebug() << all;
	ui->textBrowser->setText(all);

//{
//"results":[
//   {
//       "location":{
//           "id":"WT3Q0FW9ZJ3Q",
//           "name":"武汉",
//           "country":"CN",
//           "path":"武汉,武汉,湖北,中国",
//           "timezone":"Asia/Shanghai",
//           "timezone_offset":"+08:00"
//       },
//       "now":{
//           "text":"多云",
//           "code":"4",
//           "temperature":"28"
//       },
//       "last_update":"2020-05-31T18:09:00+08:00"
//   }
//]
//}
    QJsonParseError err;
    /// @brief  解析json对象
    /// @param  all是json信息
    QJsonDocument json_recv = QJsonDocument::fromJson(all.toUtf8(), &err);
    qDebug() << err.error;   
	if (!json_recv.isNull())
	{
        // qDebug() << "json obj success!";
        QJsonObject root_obj = json_recv.object();
        QJsonValue res_val = root_obj.value("results");
        if(res_val.isArray())
        {
            QJsonObject res_obj = res_val.toArray().at(0).toObject();

            /// @brief 解析location键的值
            QJsonObject loc_obj = res_obj.value("location").toObject();
            QString id = loc_obj.value("id").toString();
            QString name = loc_obj.value("name").toString();
            QString country = loc_obj.value("country").toString();
            QString timezone = loc_obj.value("timezone").toString();
            QString  path = loc_obj.value("path").toString();
            qDebug () << "location end!";

            /// @brief 解析now
            QJsonObject now_obj = res_obj.value("now").toObject();
            QString text = now_obj.value("text").toString();
            QString temperature = now_obj.value("temperature").toString();
            qDebug() << "now end!";

            QString last_update = res_obj.value("last_update").toString();
            qDebug() << "update end!";

        }
	}
	else
	{
		qDebug() << "json obj failed !";
	}
	reply->deleteLater();
}
  1. 解析信息如下
    在这里插入图片描述
    在这里就差不多已经好了!!!
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值