QT 客户机上https get请求JSON解析无数据

项目中使用https抓天气数据,在测试环境使用正常,客户机部分电脑无法使用,部分电脑正常。

开始以为JSON解析出错,于是:

QJsonParseError err; //判断是否为cjson数据

WriteFile( err.errorString(),"C:/error.txt");

在客户机上运行后返回:illegal value

根据错误回去检查JSON数据

QJsonDocument doc = QJsonDocument::fromJson(buf.toUtf8(),&err);
    
WriteFile( QString(doc.toJson()),"C:/error.txt");

惊讶的发现数据为空,抱着怀疑去查看了 QNetworkReply 的回复值

QString buf = reply->readAll(); //cJSON数据放入缓冲区,定义为字符串

WriteFile( buf,"C:/error.txt");

WriteFile( reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).value<QString>(),"C:/error.txt");

果然发现应答为空,立即打印错误信息

WriteFile( reply->errorString(),"C:/error.txt");

提示 error creating ssl context()

考虑到在测试环境使用正常,客户机部分电脑无法使用,部分电脑正常等原因,可能是windows系统缺少openssl的原因。Qt支持https请求需要配置openssl环境,Qt默认是不支持SSl认证的,
检测Qt支持的协议

for (int i=0;i< manager.supportedSchemes().count();i++)
{
    WriteFile( manager.supportedSchemes().at(i),"C:/error.txt");
}

经在客户环境下测试确认了是这个原因。

配置文件:库文件 libeay32.dll和ssleay32.dll。下载libeay32.dll 和 ssleay32.dll两个库文件,将其拷贝到程序生成目录下(即生成exe的同级目录)或者拷贝到QtNetwork模块的库文件目录中。

代码配置:

    QNetworkRequest request(url);
    QSslConfiguration conf = request.sslConfiguration();
    conf.setPeerVerifyMode(QSslSocket::VerifyNone);
    conf.setProtocol(QSsl::TlsV1SslV3);
    request.setSslConfiguration(conf);
//    request.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
    manager.get(request);

Win32/Win64 OpenSSL Screenshot下载地址    Win32 OpenSSL进行安装后,将bin目录下面的 libeay32.dll和ssleay32.dll库拷贝出来放到生成程序exe同级目录下即可。

或者搜索本机.\Qt\Qt5.11.0\Tools\QtCreator\bin目录下,有的话直接拷贝一份即可,省安装这么麻烦了。

 

如果还是不能正常运行,请检查运行环境,需要安装Microsoft Visual C++ 2013。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值