0

Я пытаюсь создать простой файловый загрузчик. Вот мой сегмент кода для загрузки URL-адреса; Этот код отлично работает, если я попытаюсь получить простые URL-адреса, например «http://stackoverflow.com».
Но когда я указываю URL-адреса, которые перенаправляет, он выдает сообщение об ошибке «Соединение закрыто».Ошибка QNetworkReply «Соединение закрыто» при получении простого URL-адреса

//Sets a sample URL which redirects. 
QString url = "http://downloads.sourceforge.net/project/gretl/gretl/1.9.92/gretl-1.9.92.tar.xz" 

QNetworkAccessManager * networkAccessManager = new QNetworkAccessManager(this); 

QNetworkRequest * networkRequest = new QNetworkRequest(QUrl(url)); 

//Getting the URL 
QNetworkReply * networkReply = networkAccessManager->get(*networkRequest); 

Кроме того, я подключил следующий сигнал-слот для распознавания сетевых ошибок:

//Connects networkReply object's error signal to a slot which prints the error. 
connect(networkReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(printError(QNetworkReply::NetworkError))); 

Вот слот, который печатает ошибки, если сигнал ошибки networkReply в испускается:

void printError(QNetworkReply::NetworkError code) 
{ 
    qDebug() << "Network Error Code: " << code; 
    qDebug() << networkReply->errorString(); 
} 

Из-за этой ошибки network Ответ объект никогда не получает никакого заголовка.

Моя потребность прочитать код состояния HTTP с помощью этого метода: QNetworkReply::attribute(QNetworkRequest::HttpStatusCodeAttribute)

Я не могу прочитать код статуса HTTP, потому что я не получаю заголовки.

Может ли кто-нибудь сказать, что происходит?
Заранее благодарим! :)

ответ

3

Here и here являются хорошими примерами обработки этого сценария - в основном добавить слот для finished сигнала, а затем проверить код состояния HTTP для 301 и/или QNetworkRequest::RedirectionTargetAttribute атрибута, чтобы увидеть, если вы будете перенаправлены, и если так вопрос новый запрос на переадресацию.

+0

Спасибо! Я не установил агент пользователя, как в примерах. Он работает, когда указывается пользовательский агент. Я думаю, что сервер отключает соединение, когда выясняется, что у меня нет агента пользователя. – Naveen