Проблема QNetworkAccessManager

Я пытаюсь открыть веб-страницу с помощью QNetworkAccessManager, и для некоторых страниц это работает нормально, а для других - нет. Я попытался установить настоящий пользовательский агент браузера, однако он все еще не работает, например, http://www.erepublik.com . Вот код:

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.

Любые идеи, почему это происходит? Заранее спасибо.


person Ahmed    schedule 26.07.2011    source источник


Ответы (2)


Похоже, вы правильно получаете данные, просто этот конкретный URL-адрес просто перенаправляет вас на другой. Вместо этого попробуйте http://www.erepublik.com/en (с ключом /en).

person Chris    schedule 26.07.2011
comment
Спасибо, это сработало. Поскольку ты был быстрее Гоза, я выбрал твой ответ. Может ли QNetworkAccessManager автоматически обрабатывать такие перенаправления? - person Ahmed; 27.07.2011
comment
вы можете подключиться к сигналу metaDataChanged QNetworkAccessManager и проверить, является ли код состояния кодом перенаправления HTTP - person Kamil Klimek; 27.07.2011

Возвращаемый HTML-код перенаправляет вас на http://www.erepublik.com/en, чтобы вы лучше всего сформировать QNetworkRequest, чтобы перейти прямо к этому URL-адресу.

person Goz    schedule 26.07.2011