Nsurlrequest的私人“ setallowsanyhttpscertificate:forhost:”的替代方法:?
-
18-09-2019 - |
题
我的iPhone应用程序仅用于使用(似乎很安全,似乎)私人方法而被拒绝 +setAllowsAnyHTTPSCertificate:forHost:
为了 NSURLRequest
. 。是否有非私有API来效仿此功能?
解决方案
似乎有公共API;)如何使用Nsurlconnection与SSL连接以获得不受信任的证书?
其他提示
实际上,我正在使用10.6.8进行测试,并且此代码仍然可行 - 它使用了私有API,但是检查选择器是否存在(Myurl是我试图加载到WebView或NsurlConnection的NSURL):
SEL selx = NSSelectorFromString(@"setAllowsAnyHTTPSCertificate:forHost:");
if ( [NSURLRequest respondsToSelector: selx] )
{
IMP fp;
fp = [NSURLRequest methodForSelector:selx];
(fp)([NSURLRequest class], selx, YES, [myurl host]);
}
请注意,没有使用“ @Selector”,所以绝对 全部 工作将在运行时完成。这使其尽可能安全,并隐藏在苹果的检查中,尤其是如果您掩盖了字符串。
一个真正愚蠢的解决方法是制作自己的类别方法:
@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
这应该通过Apple的私人API检查来获得,但这仍然是同一件事(使用私人的无证件API [1],可以随时折断)。实际上,更糟的是,因为它允许一切,而不仅仅是主机。
1]:私人API 应该 公开,但仍然是私人API。
setAllowsAnyHTTPSCertificate seems to now be unsupported in OS X 10.6.6 altogether.
Did I say 10.6.6? Perhaps I should have said "Snow Vista".
Not a solution, but a suggestion. Have you thought about using ASIHttpRequest Framework for this? This framework is complete in all aspects. Check the documentation, maybe it can help you too.