0

シンプルなファイルダウンローダーを作ろうとしています。URL をダウンロードするためのコード セグメントは次のとおりです。「 http://stackoverflow.com 」のような単純な URL を取得しようとすると、このコードは正常に機能します。しかし、リダイレクト
する 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();
}

このエラーのため、networkReplyオブジェクトはヘッダーをまったく受け取りません。

私の必要性は、このメソッドで HTTP ステータス コードを読み取ることです。QNetworkReply::attribute(QNetworkRequest::HttpStatusCodeAttribute)

ヘッダーが取得できないため、HTTP ステータス コードを読み取ることができません。

誰が何が起こっていると言うことができますか?
前もって感謝します!:)

4

1 に答える 1

3

このシナリオの処理の良い例を次に示します。基本的には、完了信号用のスロットを追加し、HTTPステータスコード 301 および/またはQNetworkRequest::RedirectionTargetAttribute属性をチェックして、リダイレクトされているかどうかを確認し、リダイレクトされている場合は、リダイレクト リンクの新しいリクエストを発行します。 .

于 2014-10-06T15:53:57.597 に答える