swift2 Swift/https:NSURL会话/NSURL连接HTTP加载失败

qij5mzcb  于 2022-11-06  发布在  Swift
关注(0)|答案(3)|浏览(199)

不幸的是,今天早上我的XCode更新到了第7版,我用http开发的iOS应用现在需要https。所以,在很多教程之后,我配置了我的MAMP服务器,以便使用https/ssl创建一个虚拟证书。现在在我的iOS应用中,URL如下所示:

static var webServerLoginURL = "https://localhost:443/excogitoweb/mobile/loginM.php"
static var webServerGetUserTasks = "https://localhost:443/excogitoweb/mobile/handleTasks.php"
static var webServerGetUsers = "https://localhost:443/excogitoweb/mobile/handleUsers.php"
static var webServerGetProjects = "https://localhost:443/excogitoweb/mobile/handleProjects.php"

如果我尝试在我的浏览器中访问它们,它们可以正常工作。我习惯于使用NSURLSession.sharedSession().dataTaskWithRequest()访问数据库和php文件,现在它会在title中引发错误。例如,下面这行代码引发了错误:

if let responseJSON: [[String: String]] = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())) as? [[String: String]] {
...
}

以下是完整的错误消息:

2015-09-21 16:41:48.354 ExcogitoWeb[75200:476213] CFNetwork SSLHandshake failed (-9824)
2015-09-21 16:41:48.355 ExcogitoWeb[75200:476213] NSURLSession/NSURLConnection   HTTP load failed (kCFStreamErrorDomainSSL, -9824)
fatal error: unexpectedly found nil while unwrapping an Optional value

我想知道如何解决这个问题。我在这里读到了一些有用的答案,但还有很多事情我仍然不明白,如果有人能帮助/解释我,我将非常感激。

1bqhqjot

1bqhqjot1#

将其添加到应用的Info.plist

<key>NSAppTransportSecurity</key>  
    <dict>  
    <key>NSAllowsArbitraryLoads</key>  
    <true/>  
    </dict>
nom7f22z

nom7f22z2#

fatal error: unexpectedly found nil while unwrapping an Optional value

通常意味着你在做一些不太好的事情,通过查看你的if

if let responseJSON: [[String: String]] = (try? NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions())) as? [[String: String]] {

我可以看到有一个data!,但是该数据对象是nil。在使用它们之前,您真的应该打开可选项,特别是在处理远程数据时。
然后你有一个网络错误,这可能与苹果在iOS 9中添加的ATS有关。
有关如何 * 临时 * 禁用ATS,请参阅另一个答案。https://stackoverflow.com/a/30748166/421755
编辑:我现在看到你在本地主机上添加了ssl,这很好。但是,这还不足以让ATS工作,因为它需要TLS 1.2而不是自签名证书。

vnzz0bqm

vnzz0bqm3#

这是一个很老的问题,但我想我会回答。这通常发生在当你试图打开一个http对象,它返回零。
请确保打开url并给予它一个默认值。
例如:

let jsonURL = "your https link to your json"
guard let url = URL(string: jsonURL) else { return } // dont force unwrap

希望这对你有帮助!

相关问题