首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt QNetworkReply始终为空

Qt QNetworkReply始终为空
EN

Stack Overflow用户
提问于 2013-07-17 04:41:03
回答 1查看 9.8K关注 0票数 10

我想看看GET请求的结果。根据我的理解,这段代码应该能做到这点。我做错了什么?

代码语言:javascript
复制
void getDoc::on_pushButton_2_clicked() 
{
    manager = new QNetworkAccessManager(this);
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
    manager->get(QNetworkRequest(QUrl("http://www.google.com")));
}

void getDoc::replyFinished(QNetworkReply *reply)
{
    qDebug() << reply->error(); //prints 0. So it worked. Yay!
    QByteArray data=reply->readAll();
    qDebug() << data; // This is blank / empty
    QString str(data);
    qDebug() << "Contents of the reply: ";
    qDebug() << str; //this is blank or does not print.
}

代码可以很好地编译和运行。它就是不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-17 05:25:22

尝试将您的replyFinished插槽修改为如下所示:

代码语言:javascript
复制
QByteArray bytes = reply->readAll();
QString str = QString::fromUtf8(bytes.data(), bytes.size());
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

然后,您可以打印statusCode以查看是否得到200响应:

代码语言:javascript
复制
qDebug() << QVariant(statusCode).toString();

如果你得到的是302响应,你得到的是状态重定向。您需要像这样处理它:

代码语言:javascript
复制
if(statusCode == 302)
{
    QUrl newUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
    qDebug() << "redirected from " + replyUrl + " to " + newUrl.toString();
    QNetworkRequest newRequest(newUrl);
    manager->get(newRequest);
    return;
}

我在遇到302的状态码时返回,因为我不想执行方法的其余部分。

我希望这能帮到你!

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17686561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档