QT https通信QNetworkReply返回值问题

有时很流氓 发布于 2016/06/12 18:52
阅读 1K+
收藏 0
 pManager = new QNetworkAccessManager(this);
 QNetworkRequest req;
 QSslConfiguration config;
 QByteArray content = "username=root@cve&password=111111";
 int contentLength = content.length();
 
 // config.setPeerVerifyMode(QSslSocket::VerifyNone);
 //config.setProtocol(QSsl::TlsV1SslV3);
 
 config = QSslConfiguration::defaultConfiguration();
 config.setPeerVerifyMode(QSslSocket::VerifyNone);
 config.setProtocol(QSsl::TlsV1_2);
 req.setSslConfiguration(config);
 
 req.setUrl(QUrl("https://192.168.7.11:8006/api2/json/access/ticket"));
 req.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
 req.setHeader(QNetworkRequest::ContentLengthHeader,contentLength);
 QNetworkReply *pReply = pManager->post(req, content);
 QByteArray encodedString = pReply->readAll();
 qDebug()<<QString(encodedString)<<"fan"<<endl;

ui->textBrowser->append(encodedString);

返回值QNetworkReply *pReply为什么是空的,错在什么地方,请大神指点

 

加载中
0
一号男嘉宾
一号男嘉宾
pmanager.post是异步的。语言自己加判断是否完成。
0
東條・スペンサー・咲
東條・スペンサー・咲

QNetworkAccessManager的所有的HTTP相关操作均为异步(Post、Get、Put和DeleteResource(对应DELETE)),在进箱操作获得reply之后,需要等待其发射finish或者error信号来判断是否结束。另一个坑是:QNetworkReply不具有超时判定的能力,也就是说需要手动写一个QTimer一类的东西进行超时判断。如果不想单独写一个函数进行操作,且无视掉错误的话,可以使用一个QEventLoop,将reply的信号连接到其quit槽上然后exec即可。

0
快乐的一只小青蛙
快乐的一只小青蛙

写个槽函数,对应pManager的finished(QNetWorkReply *)信号,在槽函数里readAll()就可以了。

异步函数,那时候你readAll()的时候可能还没有完成呢

0
有时很流氓
有时很流氓
太谢谢打架了,问题已解决,爱你们
返回顶部
顶部