原本在Qt4版本中存在几个和Http直接相关的类,可以进行简单的使用,但在Qt5版本后,这几个类被取消,现在采用QNetworkAccessManager/QNetworkRequest/QNetworkReply来实现数据的请求。
参照说明文档,按部就班编写代码后,发现在请求发送成功后,但在接收时总会产生SslHandshakeFailedError错误,遂修改代码增加QSslConfiguration的配置:
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::AnyProtocol);
QNetworkRequest request(QUrl(s));//定义请求
request.setSslConfiguration(config);//配置协议
QNetworkReply *reply = networkManager.get(request);
connect(reply, SIGNAL(readyRead()), this, SLOT(readyRead()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
this, SLOT(slotError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
this, SLOT(slotSslErrors(QList<QSslError>)));
如此之后,错误不再产生,可以正常接收数据:
void Dialog::readyRead()
{
QNetworkReply *reply = reinterpret_cast<QNetworkReply *>(this->sender());
if(NULL != reply)
qDebug() << U2G(reply->readAll());
}
需要注意的是:
根据文档中的说明,用户需要自己释放QNetworkReply的资源,但不能直接delete,而是要使用deleteLayer的方法。