Qt-QNetworkReply在发出请求后为空



我正在尝试在线获取网页的HTML源代码,我的代码如下:

void Helper::start()
{
    QString url = "http://www.youtube-mp3.org/get?video_id=PnL4Z0ebcBc";
    QNetworkAccessManager *manager = new QNetworkAccessManager();
    QNetworkRequest request;
    request.setUrl(QUrl(url));
    request.setRawHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/6.0;)");
    QNetworkReply *reply = manager->get(request);
    QObject::connect(reply, SIGNAL(finished()), this, SLOT(onFinished()));
    QObject::connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError)));
}
void Helper::onFinished()
{
    QIODevice * content = static_cast<QIODevice*>(QObject::sender());
    QString html = content->readAll();
    content->deleteLater();
    qDebug() << html; // It's empty!!
}
void Helper::onError(QNetworkReply::NetworkError err)
{
    qDebug() << "Starting On Error ....";
    QIODevice * content = static_cast<QIODevice*>(QObject::sender());
    QString error = content->errorString();
    content->deleteLater();
    qDebug() << error;
}

html字符串是空的,我不知道为什么!

当我把网址改成谷歌的网址时,它是有效的,怎么了?(因为我没有得到任何类型的错误)

您得到空响应的原因是您没有捕获的url重定向。

代码http://www.youtube-mp3.org/get?video_id=PnL4Z0ebcBc中提到的url将重定向到http://www.youtube-mp3.org/?e=session_expired&t#v=PnL4Z0ebcBc。因此,要么在代码中提供重定向的url,要么花一些精力处理重定向。

首先,最好使用QNetworkReply类,而不是QIODevice类。

QNetworkReply* content= qobject_cast<QNetworkReply*>(sender());

然后检查是否正在使用QNetworkReply::attribute方法重定向。

content->attribute(QNetworkRequest::RedirectionTargetAttribute)

我已经编写了工作代码,但我认为没有必要在这里分享它,因为我已经告诉了关键的事情。)

另外,我建议你看看这个。

相关内容

  • 没有找到相关文章

最新更新