如何使用Qt获取重定向页面的HTML代码?

时间:2010-04-03 23:08:24

标签: c++ qt qt4 qnetworkaccessmanager

我正在尝试使用Qt从以下网址下载html代码:

http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=nucleotide&cmd=search&term=AB100362

此网址将重定向

www.ncbi.nlm.nih.gov/nuccore/27884304

我尝试通过以下方式来做,但我无法得到任何东西。 它适用于某些网页,例如www.google.com,但不适用于此NCBI页面。有没有办法得到这个页面??

QNetworkReply::NetworkError downloadURL(const QUrl &url, QByteArray &data)
{
    QNetworkAccessManager manager;
    QNetworkRequest request(url);
    QNetworkReply *reply = manager.get(request);

    QEventLoop loop;
    QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
    loop.exec();

    if (reply->error() != QNetworkReply::NoError)
    {
        return reply->error();
    }
    data = reply->readAll();
    delete reply;
    return QNetworkReply::NoError;
}

void GetGi()
{
        int pos;

        QString sGetFromURL = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi";
        QUrl url(sGetFromURL);
        url.addQueryItem("db", "nucleotide");
        url.addQueryItem("cmd", "search");
        url.addQueryItem("term", "AB100362");

        QByteArray InfoNCBI;
        int errorCode = downloadURL(url, InfoNCBI);
        if (errorCode != 0 )
        {
            QMessageBox::about(0,tr("Internet Error "), tr("Internet Error %1: Failed to connect to NCBI.\t\nPlease check your internect connection.").arg(errorCode));
            return "ERROR";
        }

}

1 个答案:

答案 0 :(得分:3)

该页面似乎有重定向。

来自4.6的Qt文档:

  

注意:当HTTP协议返回时   重定向不会报告错误。   您可以检查是否存在重定向   随着   QNetworkRequest :: RedirectionTargetAttribute   属性。