c++ - Qt QNetworkReply 总是空的

标签 c++ qt

我想查看 GET 请求的结果。据我了解,这段代码应该可以做到。我做错了什么?

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.
}

代码编译并运行良好。它只是行不通。

最佳答案

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

QByteArray bytes = reply->readAll();
QString str = QString::fromUtf8(bytes.data(), bytes.size());
int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();

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

qDebug() << QVariant(statusCode).toString();

如果您收到 302 响应,您将收到状态重定向。您将需要像这样处理它:

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 时返回,因为我不想执行该方法的其余部分。

希望对您有所帮助!

关于c++ - Qt QNetworkReply 总是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17686561/

相关文章:

qt - 使用QSslSocket时无法解析的功能

c++ - 我的逻辑有什么问题?我的 Vector 或对象不会 push_back 新对象。保持大小为 0

c++ - 通过右移测试位与左移相同的速度?

c++ - 初始化 QList 的正确方法是什么?

c++ - 组织项目后Qt中.h文件错误没有这样的文件或目录

c++ - 从 pugixml 压缩数据

c# - 导出托管 C# 函数以将更改的 char* 参数返回到非托管代码

c++ - 获取可能的屏幕分辨率列表

c++ - 在 Visual Studio 2012 控制台应用程序中创建一个窗口?

qt - 是否可以通过 QNetworkAccessManager 检测可恢复链接