我目前正在研究 Xcode 7 beta 6 。我正在尝试向http://mySubdomain.herokuapp.com发送“删除”请求
我收到的错误是:
由于不安全,App Transport Security阻止了明文HTTP(http://)资源加载。可以通过应用程序的Info.plist文件配置临时异常。 进行API调用时出错:Error Domain = NSURLErrorDomain代码= -1022无法加载资源,因为“应用程序传输安全性”策略要求使用安全连接。 NSLocalizedDescription =无法加载资源,因为应用程序传输安全策略需要使用安全连接。,NSUnderlyingError = 0x796f7ef0 {Error Domain = kCFErrorDomainCFNetwork Code = -1022“(null)”}}
在我实际的API调用中,我放置了“ https”而不是“ http”,这实际上适用于我的POST请求。但是DELETE请求会引发上述错误。
我在这里看到了涉及pList文件的解决方案,但是没有一个对我有用。我在下面列出了我的尝试。
第一次尝试:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
第二次尝试:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>herokuapp.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSRequiresCertificateTransparency</key> <false/> </dict> </dict> </dict>
最后,我什至将所有这些临时键都放入:
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>herokuapp.com</key> <dict> <key>NSIncludesSubdomains</key> <true/> <key>NSTemporaryIncludesSubdomains</key> <true/> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSExceptionRequiresForwardSecrecy</key> <false/> <key>NSTemporaryExceptionRequiresForwardSecrecy</key> <false/> <key>NSExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads</key> <true/> <key>NSThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSTemporaryThirdPartyExceptionRequiresForwardSecrecy</key> <false/> <key>NSThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSTemporaryThirdPartyExceptionMinimumTLSVersion</key> <string>TLSv1.2</string> <key>NSRequiresCertificateTransparency</key> <false/> <key>NSTemporaryRequiresCertificateTransparency</key> <false/> </dict> </dict> </dict>
一切都没有运气!我总是得到同样的错误。DELETE请求的格式正确,因为当我从Postman手动进行处理时,得到了所需的结果。
这是我实际的API调用方法的外观,以防万一此处可能存在问题:
class func makeDELETEALLRequest(completion: (error:Bool) -> Void) { let session = NSURLSession.sharedSession() let url = NSURL(string:"https://mysubdomain.herokuapp.com/42kh24kh2kj2g24/clean") let request = NSMutableURLRequest(URL: url!) request.HTTPMethod = "DELETE" let task = session.dataTaskWithRequest(request) { (data, response, error) -> Void in if (error != nil) { print("Error making API call: \(error!)") completion(error: true) } else { let HTTPResponse = response as! NSHTTPURLResponse let statusCode = HTTPResponse.statusCode if (statusCode == 200){ print("Successfully deleted!") completion(error: false) } else { print("Different status code: \(statusCode)") completion(error: true) } } } task.resume() }
再一次,我正在使用 Xcode 7 beta 6 。
关于 我选择的答案我选择为正确的答案对我来说是正确的,因为我对项目中的错误pList文件进行了所有这些更改,并且该答案是唯一解决可能性的方法。其他答案提供的解决方案没有错,因此遇到此问题的其他任何人都应该尝试一下,因为它们是有效的。希望这对遇到类似问题的人有所帮助。
在升级到xCode 7.0之后,我也无法覆盖App Transport Security,并尝试了无济于事的同类解决方案。走了一段时间之后,我注意到我已经对“ MyAppName测试”的“支持文件”下的Info.plist进行了更改,而不是项目本身中的内容。我项目中的Supporting Files文件夹没有展开,因此我什至没有注意到其中的Info.plist。
我敢肯定,这是典型的业余错误,但是在Project Navigator中只有两行之隔,直到我注意到两者之间的区别,这让我感到沮丧。以为我会提到它,以防万一您遇到同样的问题。