我的iPhone应用程序仅因使用NSURLRequest
的(非常安全,似乎)私有方法+setAllowsAnyHTTPSCertificate:forHost:
而被拒绝。是否有非私有API来模拟此功能?
答案 0 :(得分:7)
答案 1 :(得分:6)
实际上,我正在使用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”,因此绝对所有工作将在运行时完成。这使得它与Apple的支票一样安全且隐藏,特别是如果你遮掩了字符串。
答案 2 :(得分:1)
一个非常愚蠢的解决方法是制作自己的类别方法:
@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
这应该通过Apple的私有API检查获得,但它仍然是相同的(使用可能随时中断的私有的,未记录的API [1])。实际上,它更糟糕,因为它允许一切,而不仅仅是那个主机。
[1]:应公开的私有API,但仍然是私有API。
答案 3 :(得分:1)
请看一下这个链接:http://www.abstractec.co.uk/blog/iPhone.php?itemid=70
除了欺骗私有API检查之外,它可能是一个更好的解决方案。
答案 4 :(得分:0)
不是解决方案,而是建议。您是否考虑过使用ASIHttpRequest Framework?这个框架在各个方面都是完整的。查看文档,也许它也可以帮到你。
答案 5 :(得分:0)
setAllowsAnyHTTPSCertificate。
我说10.6.6吗?也许我应该说“Snow Vista”。