1

NSURLConnection のリダイレクト ハンドラを実装しています。私の目的では、実際にはリダイレクトを行いたくありません。ページ全体をロードし、後で使用するためにリダイレクトを覚えておきたいのです。NSURLConnectionDataDelegate の connection:willSendRequest:redirectResponse: メソッドのドキュメントには、次のように記載されています。

リダイレクト応答に照らして使用する実際の URL 要求。デリゲートは、リダイレクトを許可するために変更されていないリクエストを返すか、新しいリクエストを返すか、リダイレクトを拒否して接続の処理を続行するために nil を返すことができます。

私はこのコードを試しました:

- (NSURLRequest *) connection: (NSURLConnection *) connection
              willSendRequest: (NSURLRequest *) request
             redirectResponse: (NSURLResponse *) redirectResponse
{
    NSURL *url1 = [request URL];
    NSURL *url2 = [redirectResponse URL];
    if ([request URL] != nil)
        self.redirect = [request URL];
    return nil;
}

- (void) connection: (NSURLConnection *) theConnection didReceiveResponse: (NSURLResponse *) response {
    NSURL *url1 = [response URL];
    int foo = 0;
}

プログラムはconnection:didReceiveData:connection:didFailWithError:またはを呼び出しませんでしconnectionDidFinishLoading:た。requestの代わりに戻りnil、プログラムはページを正常にロードしました。(リダイレクト先のURLは元のURLでしたが、それはまた別の質問です。関連がある場合は、2羽の鳥を殺して、それも答えてください。)

リダイレクトの試行後に NSURLConnection がファイルを処理し続けることを適切に許可するには、他に何か必要ですか?

4

1 に答える 1

0

ほとんどの場合、HTTP リダイレクト応答は現在の接続の終わりです。最初の接続がリダイレクトで終了し、リダイレクトの処理を拒否した場合、これ以上何もする必要はありません。

于 2013-10-19T04:45:12.587 に答える