Мое приложение для iPhone было отклонено исключительно для использования (очень безопасного, казалось бы) частного метода +setAllowsAnyHTTPSCertificate:forHost:
для NSURLRequest
. Существует ли не-частный API для эмуляции этой функции?
Альтернативный метод для NSURLRequest private "setAllowsAnyHTTPSCertificate: forHost:"?
Ответ 1
Кажется, для этого существует общедоступный API;) Как использовать NSURLConnection для подключения к SSL для ненадежного сертификата?
Ответ 2
На самом деле, я тестирую 10.6.8, и этот код все еще работает - он использует частный API, но проверяет, существует ли селектор (myurl - это NSURL, который я пытаюсь загрузить в WebView или NSURLConnection):
SEL selx = NSSelectorFromString(@"setAllowsAnyHTTPSCertificate:forHost:");
if ( [NSURLRequest respondsToSelector: selx] )
{
IMP fp;
fp = [NSURLRequest methodForSelector:selx];
(fp)([NSURLRequest class], selx, YES, [myurl host]);
}
Обратите внимание, что "@selector" не использовался, так что вся работа будет выполняться во время выполнения. Это делает его безопасным и скрытым от проверки Apple, как это может быть, особенно если вы замаскируете строку.
Ответ 3
Одно действительно глупое обходное решение - создать свой собственный метод категорий:
@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
Это должно получиться с помощью проверки API Apple private, но это все равно одно и то же (с использованием частного, недокументированного API [1], который может сломаться в любое время). На самом деле, это хуже, поскольку он позволяет все, а не только хост.
[1]: частный API, который должен быть опубликован, но частный API.
Ответ 4
Взгляните на эту ссылку: http://www.abstractec.co.uk/blog/iPhone.php?itemid=70
Может быть лучшим решением для вас, чем просто обходить конфиденциальную проверку API.
Ответ 5
Не решение, а предложение. Вы подумали об использовании ASIHttpRequest Framework для этого? Эта структура является полной во всех аспектах. Проверьте документацию, возможно, она тоже может вам помочь.
Ответ 6
setAllowsAnyHTTPSCertificate, похоже, теперь не поддерживается в OS X 10.6.6 вообще.
Я сказал 10.6.6? Возможно, мне следовало бы сказать "Снежная перспектива".