Frage

Meine iPhone-Anwendung wurde nur wegen der Verwendung der (anscheinend sehr sicheren) privaten Methode abgelehnt +setAllowsAnyHTTPSCertificate:forHost: für NSURLRequest.Gibt es eine nicht private API, um diese Funktionalität zu emulieren?

War es hilfreich?

Andere Tipps

Eigentlich teste ich mit 10.6.8 und dieser Code funktioniert immer noch – er verwendet die private API, prüft aber, ob der Selektor existiert (myurl ist die NSURL, die ich in eine WebView oder eine NSURLConnection laden möchte):

SEL selx = NSSelectorFromString(@"setAllowsAnyHTTPSCertificate:forHost:");
if ( [NSURLRequest respondsToSelector: selx] )
{
    IMP fp;

    fp = [NSURLRequest methodForSelector:selx];

    (fp)([NSURLRequest class], selx, YES, [myurl host]);
}

Beachten Sie, dass „@selector“ nicht unbedingt verwendet wurde alle Die Arbeit würde zur Laufzeit erledigt.Das macht es so sicher und so gut wie möglich vor den Kontrollen von Apple verborgen, insbesondere wenn Sie die Zeichenfolge unkenntlich machen.

Eine wirklich dumme Problemumgehung ist es, Ihre eigene Kategorie zu erstellen:

@implementation NSURLRequest (IgnoreSSL)

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

@end

Dies sollte die privaten API -Überprüfungen von Apple durchlaufen, aber es ist immer noch dasselbe (mit einer privaten, undokumentierten API [1], die jederzeit brechen kann). Eigentlich ist es schlimmer, da es alles zulässt, nicht nur diesen Host.

1]: eine private API, die sollte öffentlich werden, aber dennoch eine private API.

setallowsyhttpsCertificate scheint jetzt insgesamt in OS X 10.6.6 nicht unterstützt zu werden.

Habe ich 10.6.6 gesagt? Vielleicht hätte ich "Schneevista" sagen sollen.

Keine Lösung, sondern ein Vorschlag. Haben Sie über die Verwendung nachgedacht Asihttprequest Framework dafür? Dieser Framework ist in allen Aspekten vollständig. Überprüfen Sie die Dokumentation, vielleicht kann sie Ihnen auch helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top