Альтернативный метод для приватного NSURLRequest "setAllowsAnyHTTPSCertificate: forHost:"? - PullRequest
16 голосов
/ 04 января 2010

Приложение для моего iPhone было отклонено исключительно для использования (кажется, очень безопасного) частного метода +setAllowsAnyHTTPSCertificate:forHost: для NSURLRequest. Есть ли не приватный API для эмуляции этой функциональности?

Ответы [ 6 ]

7 голосов
/ 27 января 2010
6 голосов
/ 15 сентября 2011

На самом деле, я тестирую с 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, насколько это возможно, особенно если вы скрываете строку.

1 голос
/ 05 января 2010

Посмотрите по этой ссылке: http://www.abstractec.co.uk/blog/iPhone.php?itemid=70

Возможно, это лучшее решение для вас, чем просто проверка частного API.

1 голос
/ 05 января 2010

Один действительно глупый обходной путь - создать свой собственный метод категории:

@implementation NSURLRequest (IgnoreSSL)

+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
    return YES;
}

@end

Это должно выполняться частными проверками API Apple, но это все то же самое (использование частного недокументированного API [1], который может быть взломан в любое время). На самом деле, это еще хуже, поскольку позволяет все, а не только этот хост.

[1]: Частный API, который должен быть общедоступным, но, тем не менее, частный API.

0 голосов
/ 07 января 2011

setAllowsAnyHTTPSCertificate, похоже, теперь вообще не поддерживается в OS X 10.6.6.

Я сказал 10.6.6? Возможно, мне следовало сказать «Снежная Виста».

0 голосов
/ 05 января 2010

Не решение, а предложение. Вы думали об использовании ASIHttpRequest Framework для этого? Эта структура является полной во всех аспектах. Проверьте документацию, возможно, она вам тоже поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...