AFNetworking - HTTP 加载失败(错误代码:-999)swift iOS
AFNetworking - HTTP load failed (error code: -999) swift iOS
我正在使用 AFNetworking 和 iOS 11。我收到如下错误:
Task <2EC9C49F-1889-4BFF-83B4-2047ED6E5F2A>.<1> HTTP load failed (error code: -999 [1:89])
Error(countries.php): Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://www.plrc.us/api/countries.php, NSLocalizedDescription=cancelled, NSErrorFailingURLKey=https://www.plrc.us/api/countries.php}
所有可能的方法我都试过了
请帮我解决这个问题。
谢谢
有一些无关紧要的小问题:
NSExceptionAllowsInsecureHTTPLoads
应该是布尔值,而不是字符串。
Web 服务 returns JSON,但将其 Content-Type
保留为 text/html
。但是 AFNetworking(及其 Swifty 兄弟 Alamofire)验证 Content-Type
HTTP headers.
如果使用 AFNetworking,这意味着您可能想要将 text/html
添加到 AFJSONResponseSerializer
可接受的 content-types 列表中。 (或者你可以使用 AFHTTPResponseSerializer
,但你必须自己解析 JSON。)
但这两个都不太可能是 NSURLErrorCancelled
的来源。我能够从 iOS 查询此 Web 服务而没有收到此“已取消”错误(既有您的 plist 设置,也没有任何 plist 网络相关设置)。
我想知道您的计算机或网络是否存在配置问题。我会尝试在物理设备而不是模拟器上对此进行测试。 (这消除了计算机配置作为问题的可能根源。)如果可行,我会尝试在蜂窝连接上而不是通过 wifi 进行测试。 (这消除了您的 LAN 配置,例如一些代理服务器异常,作为问题的根源。)
在 AFNetworking 中,默认身份验证质询例程将 NSURLSessionAuthChallengeCancelAuthenticationChallenge
传递给 URLSession:didReceiveChallenge:completionHandler:
的完成处理程序,这将导致 NSURLErrorCancelled
。但是标准的系统配置不会触发这个。但是,如果您的计算机或网络有某些问题触发了 AFURLSessionManager
中的身份验证质询。
例如,在使用 Charles 并禁用 Charles Root 证书时,我能够重现您的问题,从而导致这种 un-enlightening“已取消”错误。在我的特定示例中,一旦我将模拟器配置为信任 Charles 的 SSL,通过 Charles 的“帮助”»“SSL 代理”»“为 iOS 模拟器安装 Charles 根证书”)。我并不是说这正是您遇到的问题(这对 Charles 用户来说是独一无二的),但它是一个更广泛的 class 问题示例,可能会触发身份验证挑战,导致 AFNetworking 取消挑战,产生 NSURLErrorCancelled
.
最重要的是,尝试改变您尝试连接到远程服务器所使用的配置,看看您是否可以识别未出现问题的配置和其他出现问题的配置。
我 运行 在开发概念证明时遇到了这个问题,但我们的服务器没有正确的证书。似乎与此相关的大多数问题都是关于使用 AFNetworking 1 和 2,并且大多数答案对我来说都不适用于 AFNetworking 3,包括修改 .plist
.
对我有用的是像这样修改 AFSecurityPolicy *securityPolicy;
:
AFSecurityPolicy *sec = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
[sec setAllowInvalidCertificates:YES];
[sec setValidatesDomainName:NO];
manager.securityPolicy = sec;
感谢 Dody Rachmat Wicaksono's answer
我找到了这个
该问题的 OP 在 Swift 中发布了答案。
注意: 与其他类似的解决方法一样,这不适用于生产环境。
我正在使用 AFNetworking 和 iOS 11。我收到如下错误:
Task <2EC9C49F-1889-4BFF-83B4-2047ED6E5F2A>.<1> HTTP load failed (error code: -999 [1:89]) Error(countries.php): Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLStringKey=https://www.plrc.us/api/countries.php, NSLocalizedDescription=cancelled, NSErrorFailingURLKey=https://www.plrc.us/api/countries.php}
所有可能的方法我都试过了
请帮我解决这个问题。
谢谢
有一些无关紧要的小问题:
NSExceptionAllowsInsecureHTTPLoads
应该是布尔值,而不是字符串。Web 服务 returns JSON,但将其
Content-Type
保留为text/html
。但是 AFNetworking(及其 Swifty 兄弟 Alamofire)验证Content-Type
HTTP headers.如果使用 AFNetworking,这意味着您可能想要将
text/html
添加到AFJSONResponseSerializer
可接受的 content-types 列表中。 (或者你可以使用AFHTTPResponseSerializer
,但你必须自己解析 JSON。)
但这两个都不太可能是 NSURLErrorCancelled
的来源。我能够从 iOS 查询此 Web 服务而没有收到此“已取消”错误(既有您的 plist 设置,也没有任何 plist 网络相关设置)。
我想知道您的计算机或网络是否存在配置问题。我会尝试在物理设备而不是模拟器上对此进行测试。 (这消除了计算机配置作为问题的可能根源。)如果可行,我会尝试在蜂窝连接上而不是通过 wifi 进行测试。 (这消除了您的 LAN 配置,例如一些代理服务器异常,作为问题的根源。)
在 AFNetworking 中,默认身份验证质询例程将 NSURLSessionAuthChallengeCancelAuthenticationChallenge
传递给 URLSession:didReceiveChallenge:completionHandler:
的完成处理程序,这将导致 NSURLErrorCancelled
。但是标准的系统配置不会触发这个。但是,如果您的计算机或网络有某些问题触发了 AFURLSessionManager
中的身份验证质询。
例如,在使用 Charles 并禁用 Charles Root 证书时,我能够重现您的问题,从而导致这种 un-enlightening“已取消”错误。在我的特定示例中,一旦我将模拟器配置为信任 Charles 的 SSL,通过 Charles 的“帮助”»“SSL 代理”»“为 iOS 模拟器安装 Charles 根证书”)。我并不是说这正是您遇到的问题(这对 Charles 用户来说是独一无二的),但它是一个更广泛的 class 问题示例,可能会触发身份验证挑战,导致 AFNetworking 取消挑战,产生 NSURLErrorCancelled
.
最重要的是,尝试改变您尝试连接到远程服务器所使用的配置,看看您是否可以识别未出现问题的配置和其他出现问题的配置。
我 运行 在开发概念证明时遇到了这个问题,但我们的服务器没有正确的证书。似乎与此相关的大多数问题都是关于使用 AFNetworking 1 和 2,并且大多数答案对我来说都不适用于 AFNetworking 3,包括修改 .plist
.
对我有用的是像这样修改 AFSecurityPolicy *securityPolicy;
:
AFSecurityPolicy *sec = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
[sec setAllowInvalidCertificates:YES];
[sec setValidatesDomainName:NO];
manager.securityPolicy = sec;
感谢 Dody Rachmat Wicaksono's answer
该问题的 OP 在 Swift 中发布了答案。
注意: 与其他类似的解决方法一样,这不适用于生产环境。