21

我们使用AFNetworking 2.0的应用程序遇到了以下问题。当使用AFHTTPRequestOperationManager的 GET 方法时,我们得到了一个错误NSURLErrorDomain code -1012。请求使用 HTTPS,服务器不需要用户认证。顺便说一句,请求从未到达服务器。

我们已经运行了几次测试,这是第一次产生错误,我们想知道这个错误是如何产生的,因为它似乎不相关。

AFHTTPRequestOperationManager 的设置:

httpOperationManager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL: 
        [NSURL URLWithString: HTTPS_URL)]];

httpOperationManager.responseSerializer = 
        [AFXMLParserResponseSerializer serializer];

[[AFNetworkActivityIndicatorManager sharedManager] setEnabled: YES];

获取请求

AFHTTPRequestOperation *op =[httpOperationManager GET: 
        [NSString stringWithFormat:SOME_PATH] 
        parameters:nil 
        success:^(AFHTTPRequestOperation *operation, id responseObject) { 
            //code to setup NSXMLParser ...
        } 
        failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"error %@", [error localizedDescription]);
        }];
4

2 回答 2

47

我认为您已经解决了问题,但是如果您尝试在没有有效证书的服务器中进行身份验证,则必须为对象中YES的属性设置:allowInvalidCertificatesAFHTTPRequestOperationManager

[yourManager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"your_username" password:@"your_password"];
[yourManager.securityPolicy setAllowInvalidCertificates:YES];

此外,正如@a1phanumeric 所说,可能有必要包含这一行:

[yourManager.securityPolicy setValidatesDomainName:NO];

干杯。

于 2014-04-10T23:16:03.850 回答
2

NSURLErrorDomain -1012 是NSURLErrorUserCancelledAuthentication. (查看错误代码列表并搜索-1012。)

您说,“服务器不需要用户身份验证”。但如果这是真的,则不会调用此错误。

可能的原因:

  1. 您的服务器错误地请求授权(服务器错误)
  2. HTTPS_URL由and组成的 URLSOME_PATH不是您所期望的,并且某些其他服务器正在请求授权
  3. 某些中介(如代理服务器或接入点)需要授权。

一些调试技巧:

  • 在 AFNetworking 实现中设置断点以查看哪个 URL 被命中
  • 配置AFHTTPRequestOperationLogger以便您可以在控制台日志中看到实际的请求正文和响应
  • 使用 Advanced Rest Client 或 Advanced Rest Client发出相同的请求curl并观察服务器的响应

旁注:我认为[NSString stringWithFormat:SOME_PATH]毫无意义 - 为什么不直接使用SOME_PATH

于 2014-03-12T01:54:03.993 回答