我的iPhone应用程序仅因为使用了(看起来非常安全的)私有方法+setAllowsAnyHTTPSCertificate:forHost:
而被拒绝,该方法是针对NSURLRequest
的。是否有非私有API可以模仿此功能?
我的iPhone应用程序仅因为使用了(看起来非常安全的)私有方法+setAllowsAnyHTTPSCertificate:forHost:
而被拒绝,该方法是针对NSURLRequest
的。是否有非私有API可以模仿此功能?
实际上,我正在使用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]);
}
一个非常愚蠢的解决方法是创建自己的类别方法:
@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
这应该可以通过苹果的私有API检查,但它仍然是同样的事情(使用私有、未记录的API[1],可能随时会出现问题)。实际上,它更糟糕,因为它允许一切,而不仅仅是那个主机。
[1]: 一个本应该公开的私有API,但仍然是私有API。
这不是一个解决方案,而是一个建议。你有没有考虑使用ASIHttpRequest Framework来实现这个功能?这个框架在各个方面都非常完整。查看文档,也许它能帮到你。
setAllowsAnyHTTPSCertificate 在 OS X 10.6.6 上似乎已经完全不再被支持。
我是说 10.6.6 吗?也许我应该说“雪景”。