AFNetworking 2.0 - 意外的 NSURLErrorDomain 错误 -1012
Posted
技术标签:
【中文标题】AFNetworking 2.0 - 意外的 NSURLErrorDomain 错误 -1012【英文标题】:AFNetworking 2.0 - unexpected NSURLErrorDomain error -1012 【发布时间】:2014-03-11 18:06:20 【问题描述】:我们在使用 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]);
];
【问题讨论】:
那么,问题是什么? 我的问题是导致 -1012 错误的原因,因为服务器不需要用户身份验证,我们的代码只是执行请求而不取消它。如果是 AFNetworking 取消了请求,我们想了解为什么以及如何处理它。 【参考方案1】:我认为您已经解决了问题,但是如果您尝试在没有有效证书的服务器中进行身份验证,则必须在您的 AFHTTPRequestOperationManager
对象中为属性 allowInvalidCertificates
设置 YES
:
[yourManager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"your_username" password:@"your_password"];
[yourManager.securityPolicy setAllowInvalidCertificates:YES];
另外,正如@a1phanumeric 所说,可能有必要包含这一行:
[yourManager.securityPolicy setValidatesDomainName:NO];
干杯。
【讨论】:
谢谢。是的,我们确实通过添加中间证书解决了服务器端问题。这样做比允许无效证书更安全。 任何使用来自startssl.com 的免费证书的人都会遇到这个问题。代码 -999。 对此的更新 - 我还必须添加[operationManager.securityPolicy setValidatesDomainName:NO];
才能使其正常工作。
非常感谢validatesDomainName
的加入。我们在这里玩的是纯 IP 地址,它非常需要这个地址才能工作。
@Charis 如何添加中间证书。你说的是 ssl 吗?【参考方案2】:
NSURLErrorDomain -1012 是NSURLErrorUserCancelledAuthentication
。 (请参阅error code list 并搜索 -1012。)
您声明“服务器不需要用户身份验证”。但如果这是真的,则不会调用此错误。
可能的原因:
-
您的服务器错误地请求授权(服务器错误)
由
HTTPS_URL
和SOME_PATH
组成的URL 不是您所期望的,并且某些其他 服务器正在请求授权
某些中介(如代理服务器或接入点)需要授权。
一些调试技巧:
在 AFNetworking 实现中设置断点以查看哪个 URL 被命中 配置AFHTTPRequestOperationLogger,以便您可以在控制台日志中看到实际的请求正文和响应 使用curl
或Advanced Rest Client 发出相同的请求并观察服务器的响应
旁注:我认为[NSString stringWithFormat:SOME_PATH]
毫无意义——为什么不直接使用SOME_PATH
?
【讨论】:
这不是服务器/代理问题,因为我们在收到错误时进行了 tcp 转储,并且请求从未到达服务器。在客户端调用了“关闭通知”。我们只在特定设备上遇到过这个问题,我们不能重现(至少不容易)。我们重新启动了设备,但同样的请求仍然出现错误,然后我们卸载并重新安装了应用程序,错误消失了。我们担心可能导致它的原因,因为它没有重新出现在该设备或任何其他设备中。谢谢。 (SOME_PATH 实际上是对测试/生产 url 的检查) 我今天又遇到了同样的错误。顺便说一句,该设备在 WiFi 上。当我再次切换到 3G 时,请求未执行,但没有错误,因此不调用失败块。我只在设备的控制台中看到这些行“以上是关于AFNetworking 2.0 - 意外的 NSURLErrorDomain 错误 -1012的主要内容,如果未能解决你的问题,请参考以下文章
使用 AFNetworking 的 enqueueBatchOfHTTPRequestOperations 失败时如何重新添加操作
具有 setReachabilityStatusChangeBlock 支持的 AFNetworking EnqueueBatchOfHTTPRequestOperations