2013-05-31 36 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