ユーザーがインターネット接続を使用すると、インターネット プロバイダーのログイン ページにリダイレクトされます。
彼がログインする前にリクエストを実行すると、プロバイダーからの html データと、最初にデータをリクエストしたアドレスからのデータが返されます。
データを要求したデータ アドレスが、応答を取得したアドレスと同じかどうかを確認する方法はありますか?
すなわち
応答 URL を取得する方法はありますか?
ユーザーがインターネット接続を使用すると、インターネット プロバイダーのログイン ページにリダイレクトされます。
彼がログインする前にリクエストを実行すると、プロバイダーからの html データと、最初にデータをリクエストしたアドレスからのデータが返されます。
データを要求したデータ アドレスが、応答を取得したアドレスと同じかどうかを確認する方法はありますか?
すなわち
応答 URL を取得する方法はありますか?
両方NSURLRequest
とNSURLResponse
両方に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に属しています。