0

NSURLConnection でリダイレクトを処理しようとしています。私の目的のために、後で使用するためにリダイレクトを記録し、残りのページのダウンロードを続行したいと考えています。テストするために、 http://www.google.comを読み取ろうとしました。リダイレクトを処理するコードは次のとおりです。

- (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 request;
}

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

これらのメソッドにブレークポイントを設定すると、リダイレクト先が

http://www.google.com/

具体的には、connection:willSendRequest:redirectResponse:ではhttp://www.google.com/url1設定され、 nil です。では、http://www.google.com/でもあります。url2connection:didReceiveResponse:url1

いいよ。スラッシュを追加します。しかし、末尾にスラッシュが付いた URL を使用して新しい NSURLConnection を開くと、同じことが返されます。

リダイレクトされた URL が、NSURLConnection に渡された元の URL と同じなのはなぜですか?

4

1 に答える 1

0

関数が初めてヒットし、まだリダイレクトがないことを確認していると思います。したがって、リダイレクトがあった場合、元の URL でこのヒットが表示され、リダイレクトで 2 回目のヒットが表示されます。あなたの目的のために、リクエストが開始されたときに URL を保存して、まだリダイレクトされていないときにアクションを実行しないようにすることができます。

于 2012-12-07T00:50:14.463 に答える