Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在证书不可信的情况下,如何通过NSURLConnection sendSynchronousRequest调用https端点?_Ios_Objective C_Https_Nsurlconnection - Fatal编程技术网

Ios 在证书不可信的情况下,如何通过NSURLConnection sendSynchronousRequest调用https端点?

Ios 在证书不可信的情况下,如何通过NSURLConnection sendSynchronousRequest调用https端点?,ios,objective-c,https,nsurlconnection,Ios,Objective C,Https,Nsurlconnection,我有一个IOS6应用程序,它连接到restapi以获取一些数据 我在数据获取程序类中使用NSURLConnection sendSynchronousRequest,并使用控制器类中的块通过GCD异步模式调用其方法。到目前为止还不错 我的问题是,我将API端点更改为https,它的证书是自签名的(我知道它的安全问题等,但现在不存在问题) 通过使用sendSynchronousRequest,我无法绕过这个问题,因为要绕过它,我需要为NSURLConnection设置委托,但在sendSynchr

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

我在数据获取程序类中使用NSURLConnection sendSynchronousRequest,并使用控制器类中的块通过GCD异步模式调用其方法。到目前为止还不错

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

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

我不喜欢异步请求调用,我非常喜欢这种GCD/sync调用模式,它工作起来很有魅力,简单明了

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


谢谢大家

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

通过使用
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: