2

ユーザーがインターネット接続を使用すると、インターネット プロバイダーのログイン ページにリダイレクトされます。

彼がログインする前にリクエストを実行すると、プロバイダーからの html データと、最初にデータをリクエストしたアドレスからのデータが返されます。

データを要求したデータ アドレスが、応答を取得したアドレスと同じかどうかを確認する方法はありますか?

すなわち

応答 URL を取得する方法はありますか?

4

1 に答える 1

1

両方NSURLRequestNSURLResponse両方にURLプロパティがありますが、 を使用してそれらを比較して-isEqual: も、目的の結果が得られない場合がありますNSURL役立つカテゴリは次のとおりです。

@interface NSURL (Equivalence)
- (BOOL)isEquivalent:(NSURL *)aURL;
@end

@implementation NSURL (Equivalence)
- (BOOL)isEquivalent:(NSURL *)aURL
{
    if ([self isEqual:aURL]) return YES;
    if ([[self scheme] caseInsensitiveCompare:[aURL scheme]] != NSOrderedSame) return NO;
    if ([[self host] caseInsensitiveCompare:[aURL host]] != NSOrderedSame) return NO;
    if ([[self path] compare:[aURL path]] != NSOrderedSame) return NO;
    if ([[self port] compare:[aURL port]] != NSOrderedSame) return NO;
    if ([[self query] compare:[aURL query]] != NSOrderedSame) return NO;
    return YES;
}
@end

そのカテゴリをインポートすると、AFNetworking で次のようなことができます。

[self getPath:@"somePath" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    if ([operation.request.URL isEquivalent:operation.response.URL]) {
        // they match
    } else {
        // there was a redirect
    }
} failure:nil];

NSURL+Equivalence編集:私は標準のツールボックスに組み込まれてからずっと経ちましたが、クレジットはdanhとこの優れたSO answerに属しています。

于 2013-02-21T02:48:32.960 に答える