Ios 在证书不可信的情况下,如何通过NSURLConnection sendSynchronousRequest调用https端点?
我有一个IOS6应用程序,它连接到restapi以获取一些数据 我在数据获取程序类中使用NSURLConnection sendSynchronousRequest,并使用控制器类中的块通过GCD异步模式调用其方法。到目前为止还不错 我的问题是,我将API端点更改为https,它的证书是自签名的(我知道它的安全问题等,但现在不存在问题) 通过使用sendSynchronousRequest,我无法绕过这个问题,因为要绕过它,我需要为NSURLConnection设置委托,但在sendSynchronousRequest的情况下,我无法设置委托,委托方法只是在异步调用的情况下调用 我不喜欢异步请求调用,我非常喜欢这种GCD/sync调用模式,它工作起来很有魅力,简单明了 那么,如何通过GCD和NSURLConnection sendSynchronousRequest调用https api端点,从而绕过不受信任的证书问题呢Ios 在证书不可信的情况下,如何通过NSURLConnection sendSynchronousRequest调用https端点?,ios,objective-c,https,nsurlconnection,Ios,Objective C,Https,Nsurlconnection,我有一个IOS6应用程序,它连接到restapi以获取一些数据 我在数据获取程序类中使用NSURLConnection sendSynchronousRequest,并使用控制器类中的块通过GCD异步模式调用其方法。到目前为止还不错 我的问题是,我将API端点更改为https,它的证书是自签名的(我知道它的安全问题等,但现在不存在问题) 通过使用sendSynchronousRequest,我无法绕过这个问题,因为要绕过它,我需要为NSURLConnection设置委托,但在sendSynchr
谢谢大家 您自己已经回答了您的问题: 通过使用
sendSynchronousRequest
我无法绕过这个问题,因为要绕过它,我需要为NSURLConnection
设置委托,但是在sendSynchronousRequest
的情况下,我无法设置委托,委托方法只是在异步调用时调用的
您应该真正习惯异步样式。在dispatch\u async
调用中使用同步调用的方法至少可以说是次优的
sendSynchronousRequest的方法sendSynchronousRequest
适用于初学者和玩具应用程序。我想,苹果真的应该反对这种方法,并在下一次的IOS中删除它
sendAsynchronousRequest:queue:completionHandler:方法用于演示、示例应用程序、概念验证以及不使用身份验证和https的非常简单的请求
最后,使用异步样式实现委托是为了“严肃”和发布应用程序。任何严肃的应用程序在与专用服务器通话时都应该使用https,除非该服务器是公共的且不支持https
一旦您切换到异步风格,您的实际问题可能会有答案。但是,没有必要绕过证书,而是使用发行版应用程序中使用的证书。我的问题是,我有一个向API发出请求的中央抓取器类。有几十种。因此,通过GCD而不是AsyncRequest使这些调用异步非常容易。那么在这种情况下,GCD的作用是什么?没什么?还是那么容易。“just”(并非真正的just)需要一个类,该类围绕
NSURLConnection
,基本上提供异步启动连接的实例方法start
,以及一个completion属性,该属性的块将在连接完成时被调用。然后,您可以将其包装成一个与sendAsynchronousRequest:queue:completionHandler:
基本相同的方法。但是,您的类可以根据需要实现委托。好的,我理解。我知道委托和在其他情况下大量使用,但在这些数据获取情况下,IMO GCD在我的应用程序代码中非常好,我真的很难过,因为https的事情,我不得不更改它。谢谢你的建议!注意:在方便的API中使用的NSURLConnection
可能会使用“默认”处理进行身份验证。也就是说,它可能已经适用于“普通”情况。官方文档包含详细信息:请参见连接:willSendRequestForAuthenticationChallenge:
和performDefaultHandlingForAuthenticationChallenge:
。