Альтернативный метод для частного «setallowsanyhttpscertificate: Forhost:»?
-
18-09-2019 - |
Вопрос
Мое приложение для iPhone было отклонено исключительно для использования (очень безопасно, кажется) частный метод +setAllowsAnyHTTPSCertificate:forHost:
за NSURLRequest
. Анкет Есть ли не частный API для подражания этой функциональности?
Решение
Кажется, для этого есть публичный API;)Как использовать NSURLConnection для соединения с SSL для ненадежного сертификата?
Другие советы
На самом деле, я тестирую с 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, насколько это возможно, особенно если вы скрываете строку.
Один действительно глупый обходной путь - это сделать свой метод категории:
@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
Это должно быть получено от частных проверок API Apple, но это все же то же самое (используя частное, незарегистрированное API [1], который может сломать в любое время). На самом деле, это хуже, так как это позволяет все, а не только этот хост.
1]: частный API, который должен быть обнародованным, но частный API, тем не менее.
SetAllowsAnyHttpsCertificate, похоже, теперь не поддерживается в OS X 10.6.6 вообще.
Я сказал 10.6.6? Возможно, мне следовало сказать «Снежная перспектива».
Не решение, а предложение. Вы думали об использовании Asihttprequest Framework для этого? Эта структура завершена во всех аспектах. Проверьте документацию, возможно, это может вам помочь.