AFNetworking - HTTP加载失败(错误代码:-999)swift iOS

Rid*_*hah 7 ios afnetworking swift app-transport-security

我在iOS 11中使用AFNetworking.我收到的错误如下:

任务<2EC9C49F-1889-4BFF-83B4-2047ED6E5F2A>.<1> HTTP加载失败(错误代码:-999 [1:89])错误(countries.php):错误域= NSURLErrorDomain代码= -999"已取消"UserInfo = {NSErrorFailingURLStringKey = https://www.plrc.us/api/countries.php,NSLocalizedDescription =已取消,NSErrorFailingURLKey = https://www.plrc.us/api/countries.php }

我已经尝试了所有可能的方式.

info.plist中

请帮我解决这个问题.

谢谢

Rob*_*Rob 5

有一些无关紧要的小问题:

  1. NSExceptionAllowsInsecureHTTPLoads 应该是一个布尔值,而不是一个字符串。

  2. Web 服务返回 JSON,但将其保留Content-Typetext/html. 但是 AFNetworking(及其 Swifty 兄弟 Alamofire)验证Content-TypeHTTP 标头。

    如果使用AFNetworking,这意味着你可能要添加text/html到可接受的内容类型的列表AFJSONResponseSerializer。(或者您可以使用AFHTTPResponseSerializer,但是您必须自己解析 JSON。)

但这些都不太可能是NSURLErrorCancelled. 我能够从 iOS 查询此 Web 服务而不会出现此“已取消”错误(无论是使用您的 plist 设置,还是根本没有任何与 plist 网络相关的设置)。

我想知道您的计算机或网络上是否可能存在某些配置问题。我会尝试在物理设备而不是模拟器上进行测试。(这消除了计算机配置作为问题的可能来源。)如果可行,我会尝试在蜂窝连接上而不是通过 wifi 进行测试。(这消除了 LAN 的配置,例如某些代理服务器的怪异,作为问题的根源。)

在 AFNetworking 中,默认的身份验证质询例程传递NSURLSessionAuthChallengeCancelAuthenticationChallenge给 的完成处理程序URLSession:didReceiveChallenge:completionHandler:,这将导致NSURLErrorCancelled. 但是标准系统配置不会触发这个。但是,如果您的计算机或网络中的某些内容在AFURLSessionManager.

例如,我能够在使用Charles并禁用 Charles 根证书时重现您的问题,从而导致这种不具启发性的“取消”错误。在我的特定示例中,一旦我将模拟器配置为信任 Charles 的 SSL,通过 Charles 的“帮助”»“SSL 代理”»“为 iOS 模拟器安装 Charles 根证书”)。我并不是说这是您案例中的确切问题(这是 Charles 用户独有的),但它是可能触发身份验证挑战的更广泛问题的一个示例,导致 AFNetworking 取消挑战,产生NSURLErrorCancelled.

最重要的是,尝试改变您尝试连接到远程服务器的配置,看看您是否可以识别不出现问题的配置和其他出现问题的配置。