1

我有一个 IOS6 应用程序,它连接到 REST API 以获取一些数据。

我在我的数据获取器类中使用 NSURLConnection sendSynchronousRequest,并通过 GCD 异步模式使用我的控制器类中的块调用它的方法。到目前为止,一切都很好。

我的问题是,我将 API 端点更改为 https,它的证书是自签名的(我知道它的安全问题等,但现在没有问题)。

通过使用 sendSynchronousRequest 我无法绕过这个问题,因为要绕过它,我需要为 NSURLConnection 设置委托,但在 sendSynchronousRequest 的情况下我不能设置委托,委托方法只是在异步调用的情况下调用。

我不喜欢异步请求调用,我非常喜欢这种 GCD/sync 调用模式,它就像一个魅力,简单明了。

那么如何通过 GCD 和 NSURLConnection sendSynchronousRequest 调用 https api 端点来绕过不受信任的证书问题?

谢谢大家!

4

1 回答 1

0

您已经自己回答了您的问题:

通过使用sendSynchronousRequest我无法绕过这个问题,因为要绕过它,我需要为 设置委托NSURLConnection,但如果sendSynchronousRequest我无法设置委托,则在异步调用的情况下只调用委托方法。

你真的应该习惯异步风格。在调用中使用同步调用的方法dispatch_async至少可以说是次优的。

该方法sendSynchronousRequest适用于初学者和玩具应用程序。恕我直言,Apple 应该真正弃用此方法并在下一个 iOS 中将其删除。

该方法sendAsynchronousRequest:queue:completionHandler:用于演示目的、示例应用程序、概念证明以及不使用身份验证和 https 的非常简单的请求。

最后,使用异步风格实现委托是为了“严肃”和发布应用程序。任何严肃的应用程序在与专用服务器通信时都应该使用 https,除非服务器是公共的并且不支持 https。

一旦你切换到异步风格,你的实际问题可能会有答案。但是,无需绕过证书 - 您将使用在发布应用程序中使用的证书。

于 2013-06-12T10:37:54.603 回答