2010-04-03 81 views
2

我試圖使用Qt從以下網址的HTML代碼下載:如何使用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"; 
     } 

} 
+0

請發佈您的代碼來處理重定向。沒有這些,你得到的任何東西都是猜測。 – 2010-04-04 04:43:04

回答

3

該頁面似乎有重定向。

從Qt的文檔爲4.6:

注意:當HTTP協議返回 重定向沒有錯誤將報告。 您可以檢查是否有重定向 與 QNetworkRequest :: RedirectionTargetAttribute 屬性。

+0

謝謝:))這真的很有幫助。 但是,我試着使用重定向,它的工作原理 - 我可以得到一些屬於NCBI的html代碼,但是這個代碼與我們通過瀏覽器可以看到的不一樣。你有什麼想法,爲什麼? – 2010-04-04 07:43:51

+0

有可能存在一些服務器端腳本,它會根據所看到的瀏覽器提供不同的內容。嘗試設置用戶代理字符串模仿Firefox或其他。試試這個: 'reply-> setHeader(「User-Agent」,「Mozilla/5.0(Windows; U; Windows NT 6.0; en-US; rv:1.9.1.7)Gecko/20091221 Firefox/3.5.7(。 NET CLR 3.5.30729)「);' 或類似的東西。 – 2010-04-04 13:06:31

+0

setHeader是QNetworkReply中的一個受保護的函數,所以它不能直接調用,但你的回答讓我知道原因並給了我一些指導,謝謝:) (我應該投票了,但我沒有足夠的聲望XD) 我會先嚐試設置瀏覽器,看它是否有效。有一件事,這隻會影響我們得到的HTML代碼,對吧?我的意思是,我們不需要在我們的系統上安裝firefox和windows? 我需要跨平臺的屬性。 – 2010-04-04 21:45:59