[QT开发]网络编程中,发送请求成功,无法接收回信

问题描述

使用qt的网络编程,那么一定要使用QNetworkAccessManager类,然后配合QNetworkRequest和QNetworkReply使用。

  • QNetworkRequest : 这个类可以发送get请求或者post请求,分别对应get和post方法
  • QNetworkReply : 这个类是接收请求之后的回应

请求成功之后QNetworkAccessManager会发射一个finished信号,我们只要给它匹配一个槽函数,那么就可以在槽函数处理回应的内容了。
问题就在这里,有时候我们指定的槽函数,得不到回应,并不是槽函数没有被调用,而是回应为空

代码例子

void Util::httpRequest(QString url, QString method, QString outputStr)
{
    if( !mNetManager ) {
        mNetManager = new QNetworkAccessManager(this);
    }
    //构造http请求
    QNetworkRequest req;
    QSslConfiguration config;
    config.setPeerVerifyMode(QSslSocket::VerifyNone);
    config.setProtocol(QSsl::TlsV1SslV3);
    req.setSslConfiguration(config);
    req.setUrl(QUrl(url));
    QNetworkReply *reply = NULL;
    if( !method.compare("GET")) {
        reply = mNetManager->get(req);
    }
    if( outputStr != NULL) {
        //使用utf-8上传post请求数据
        //如果使用outputStr.toLatin1()的话,那么微信客户端产生的菜单是乱码
        reply = mNetManager->post(req, outputStr.toUtf8());
    }
//qDebug() << "http requst start....";
    connect(mNetManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(on_httpRequest_slot(QNetworkReply*)));
}

void Util::on_httpRequest_slot(QNetworkReply *reply)
{
    QString str(reply->readAll());
Log::log(QString("on http request %1").arg(str));
Log::log(str);
    emit returnMsg(str);
}
QString str(reply->readAll());

上面那一行得到回应的str为空

解决办法

上面的代码可以使用qt自带的工具打包,只要使用windeployqt命令就能够打包成课运行的程序,打包方法如下:
自学QT之windeployqt工具的使用
上面的程序因为使用QSsl,也就是使用了https连接,这个需要的dll文件需要自己下载,名字就叫做libeay32.dllssleay32.dll这两个dll文件,放在打包后的目录下面,网络访问就可以恢复正常.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值