我试图在线获取网页的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
字符串为空,我无法找出原因!
当我将网址更改为Google时,它有效,有什么不对? (因为我没有得到任何错误)
答案 0 :(得分:2)
您获得空响应的原因是因为您没有捕获的网址重定向。
代码http://www.youtube-mp3.org/get?video_id=PnL4Z0ebcBc
中提到的网址被重定向到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)
我已经编写了工作代码,但由于我已经告诉过关键的事情,所以我不认为有必要在这里分享。 ;)
另外,我建议你看一下this。