2011-07-26 4 views
2

QNetworkAccessManagerを使用してWebページを開こうとしています。一部のページでは正常に動作しますが、他のページでは動作しません。私は実際のブラウザのユーザーエージェントを設定しようとしましたが、それでもまだ動作しません。例えば、http://www.erepublik.comです。ここでは、コードがあります:QNetworkAccessManagerの問題

QNetworkAccessManager *manager = new QNetworkAccessManager(this); 
connect(manager, SIGNAL(finished(QNetworkReply*)), 
      this, SLOT(replyFinished(QNetworkReply*))); 

QNetworkRequest *request = new QNetworkRequest(QUrl("http://www.erepublik.com")); 

request->setRawHeader("User-Agent", "Mozilla/5.0 (X11; U; Linux i686 (x86_64); " 
          "en-US; rv:1.9.0.1) Gecko/2008070206 Firefox/3.0.1"); 
request->setRawHeader("charset", "utf-8"); 
request->setRawHeader("Connection", "keep-alive"); 

manager->get(*request); 

...

void MainWindow::replyFinished(QNetworkReply *reply) 
{ 
    QString data = reply->readAll(); 
    qDebug() << data; 
} 

データは以下の通りです:

<html><head><meta http-equiv="refresh" content="0;url=http://www.erepublik.com/en"/></head></html><html><head><meta http-equiv="refresh" content="0;url=http://www.erepublik.com/en"/></head></html> 

は今、何がこれはhttp://www.hardwarebase.netようなサイトのために働く私を悩ませています(データが返されます通常のHTMLソース)、eRepublikでは動作しません。

私が正確にしたいことを知りたい人は、eRepublikのフロントページから国の人口数を取得したいと考えています。

これは何故ですか?前もって感謝します。

答えて

3

データを正しく取得しているようですが、特定のURLから別のURLに転送するだけです。代わりにhttp://www.erepublik.com/en(/ enを使用)を試してください。

+1

ありがとうございました。あなたがGozよりも速かったので、私はあなたの答えを選びました。 QNetworkAccessManagerは自動的にそのようなリダイレクトを処理できますか? – Ahmed

+0

QNetworkAccessManagerのmetaDataChangedシグナルに接続し、ステータスコードがHTTPリダイレクトコードであるかどうかを確認することができます –

+0

ありがとう、カミル! – Ahmed

1

返されたHTMLはhttp://www.erepublik.com/enにリダイレクトされますので、QNetworkRequestを作成してそのURLに直接進むことをお勧めします。