2012-09-10 6 views
14

AFNetworkingリクエストからレスポンスヘッダーを読み取る方法を理解しようとしていますか?AFNetworkingレスポンスヘッダーを読む

次のスニペットでは可能ですか、別の方法をとる必要がありますか?

// Create client 
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://example.com/"]]; 

// Send request 
[client getPath:@"/test" parameters:nil success:^(AFHTTPRequestOperation *operation, id response) { 

} failure:^(AFHTTPRequestOperation *operation, NSError *error){ 

}]; 
+0

あなたが必要とするヘッダーは、応答オブジェクトから抽出できますか?応答オブジェクトをNSHTTPURLResponseオブジェクトに型キャストして、HTTPステータスコードのような値を取得する必要があります。 '-allHeaderFields'というメソッドもあります。詳細はこちらhttps://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSHTTPURLResponse_Class/Reference/Reference.html –

+0

私はこれが応答オブジェクトからかなり正しいとは思わないあなたが参照しているのはリクエストの応答であり、必ずしもNSHTTPURLResponseのインスタンスではありません。 –

答えて

35

これを達成する最も簡単な方法は、成功と失敗ブロックの両方で利用可能であるAFHTTPRequestOperationインスタンスの応答性(ないブロックの応答オブジェクト)を使用することです。

このレスポンスオブジェクトはNSHTTPURLResponseのインスタンスで、allHeaderFieldsというメッセージを送信して、リクエストのすべてのヘッダーを取得できます。

+0

完璧!これは私のためにそれを解決しました、ありがとう! 私の場合[[操作応答] allHeaderFields]は私が望むものを手に入れました – lix

+2

これは一種の不透明です。あなたはこのトピックを拡張したいと思いますか、おそらくメカニックについて少し説明してください。 AFNetworkingの新機能として、私は到達可能性ステータスにアクセスして適切なコードを実装する方法を理解するのが難しいです。 – AMayes

+6

これを行う方法が不思議なら、ここでは 'AFHTTPRequestOperation'オペレーションは' AFHTTPRequestOperation * operation'です。また、httpヘッダ情報を取得するには、NSDictionaryとoperation.response.allHeaderFieldsの変数を宣言します。それで 'dictionaryLogging'のように' NSLog'を使って印刷することができます。 – Isuru

4

それはコンパイルエラーを出したので、私は、 [[operation response] allHeaderFields]またはoperation.response.allHeaderFieldsで それを解決することができませんでした。

私はちょうど(NSDictionary *)にそれを型変換し、受け入れられた答えは、実際の例を持っていないので、簡単に言えば

[[(NSDictionary *)operation valueForKey: @"response"] valueForKey: @"allHeaderFields"]

+0

SOは7文字以下の編集を許可しないため、上記の入力ミスは修正できません。どのように愚かなのですか? –

+1

@KenThompsonはコンテンツのどこかにスペースを追加するだけです... – brandonscript

6

ように、キーの値にアクセス:

おそらく
[operationInstance setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"%@", operation.response.allHeaderFields); 
}]; 
0
NSDictionary *responseheaders = [HTTPResponse allHeaderFields]; 
NSString *newtoken = [responseheaders valueForKey:@"Authorization"]; 
関連する問題