2013-05-31 58 views
1

我想讓我的應用程序處理HTTP客戶端錯誤。理想情況下,無論發生何種錯誤,我都希望運行一個靜態方法,而不管造成這種錯誤的請求。RestKit請求掛在HTTP錯誤

看來我做錯了事 - 我試圖添加一個RKDynamicResponseDescriptor來調用該方法,但它不會被調用。每當我的服務器錯誤響應,請求無法完成(網絡活動指示燈持續紡紗和AFNetworkingOperationDidFinishNotification永遠不會公佈。)

我可以通過創建一個新的AFHTTPRequest請求,這樣重現行爲:

request = [[RKObjectManager sharedManager].HTTPClient requestWithMethod:@"GET" path:@"events" parameters:nil]; 
AFHTTPRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request 
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
         NSLog(@"%@", JSON); 
        } 
        failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { 
         NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo); 
        }]; 

既不調用success也不調用failure塊。如果我將第一行替換爲

request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url]]; 

塊被調用。我如何讓RestKit處理HTTP錯誤響應?

編輯1:顯然,在服務器返回帶有驗證質詢的401這兩種情況下會發生這種情況。我曾嘗試在didReceiveAuthenticationChallenge中的RKHTTPRequestOperation中設置斷點,但未觸發。 My Fiddler表明只發送一個請求。

回答

1

經過大量的擺弄之後,我想我找到了這個問題的原因。當啓用SSL鎖定時,AFUrlConnectionRequest類實現connection:willSendRequestForAuthenticationChallenge:委託方法。如果身份驗證質詢與SSL無關,則實現僅僅返回。

documentation of NSUrlConnectionDelegate

這種方法允許委託進行一次有關連接驗證一個明智的決定。如果委託實現了這種方法,它沒有必要實施

  • 連接:canAuthenticateAgainstProtectionSpace :,
  • 連接:didReceiveAuthenticationChallenge :,
  • connectionShouldUseCredentialStorage :.

實際上,這些其他方法不會被調用。

的方法將不被調用,並且因此決不RestKit知道該請求導致HTTP錯誤401

我解決通過去除此定義問題,所以該委託方法未實現:

#define _AFNETWORKING_PIN_SSL_CERTIFICATES_ 
+0

您是否報告過此錯誤?我想我可能會遇到同樣的問題。 – RonLugge