2012-09-10 158 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 *操作。爲了得到http頭信息,聲明一個'NSDictionary'和'operation.response.allHeaderFields'變量。然後你可以使用'NSLog'來打印出來,'dictionary.description'。 – 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"];