La mia applicazione iPhone è stata rifiutata esclusivamente per l'utilizzo del metodo privato (molto sicuro, sembra) +setAllowsAnyHTTPSCertificate:forHost:
per NSURLRequest
. Esiste un'API non privata per emulare questa funzionalità?Metodo alternativo per "setAllowsAnyHTTPSCertificate" privato di NSURLRequest: forHost: "?
risposta
Sembra che ci sia un'API pubblica per questo;) How to use NSURLConnection to connect with SSL for an untrusted cert?
Grazie! Strano che Google non l'abbia presentato. – Michael
Una soluzione veramente stupido è quello di rendere il proprio metodo di categoria:
@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
Questo dovrebbe ottenere mediante controlli API private di Apple, ma è ancora la stessa cosa (usando un, privato API non documentate [1] che è passibile di rottura in qualsiasi momento). In realtà, è peggio perché consente tutto, non solo quell'host.
[1]: Un'API privata che deve essere pubblicata su ma un'API privata.
Da quanto ne so, questo non supererà ancora i controlli di Apple, in quanto sembrano utilizzare un'analisi piuttosto semplice basata esclusivamente su selettori, non sul loro utilizzo. –
@Mike: sei sicuro? Non sto affatto "usando" il selettore, solo ridefinendolo. È internals di Apple che lo chiamano. Certo, questo non è affatto sicuro, ma non vedo come non passerebbe gli assegni di Apple. – Michael
In questo modo la tua app verrà sicuramente respinta. – Franklin
Date un'occhiata a questo link: http://www.abstractec.co.uk/blog/iPhone.php?itemid=70
potrebbe essere una soluzione migliore per voi che solo ingannando il controllo di API private.
È possibile utilizzare un NSURLConnection invece di un CFHTTPMessageRef? Preferirei che il download fosse asincrono. – Michael
Non una soluzione, ma un suggerimento. Hai pensato di utilizzare ASIHttpRequest Framework per questo? Questo quadro è completo sotto tutti gli aspetti. Controlla la documentazione, forse può aiutarti anche tu.
setAllowsAnyHTTPSCertificate sembra essere ora supportato in OS X 10.6.6 del tutto.
Ho detto 10.6.6? Forse avrei dovuto dire "Snow Vista".
In realtà, sto testando con 10.6.8 e questo codice funziona ancora - sta usando l'API privata ma controllando che il selettore esista (myurl è l'NSURL che sto provando a caricare in una WebView o NSURLConnection) :
SEL selx = NSSelectorFromString(@"setAllowsAnyHTTPSCertificate:forHost:");
if ([NSURLRequest respondsToSelector: selx])
{
IMP fp;
fp = [NSURLRequest methodForSelector:selx];
(fp)([NSURLRequest class], selx, YES, [myurl host]);
}
nota che "@selector" non è stato utilizzato in modo che assolutamente tutto il lavoro sarebbe stato fatto a tempo di esecuzione. Ciò lo rende sicuro e nascosto dagli assegni di Apple, soprattutto se si oscura la stringa.
Funziona a meraviglia! Grazie – Chris
Non una soluzione consigliata: (1) non si offre all'utente la possibilità di accettare o meno. (2) Stai scrivendo in un forum pubblico se Apple capita su di esso che potrebbe farci saggio. (3) Vedi la risposta di Yonel: http://stackoverflow.com/a/2145367/818352 – George
Volevo solo dire che questo ha funzionato per me finché non sono usciti i 5S e iPad Air - si blocca qui (sul cast) su uno di questi dispositivi. – Luke
- 1. Metodo alternativo per uccidere filo
- 2. Metodo alternativo per setHours() di java.util.Date?
- 3. NSURLRequest - codifica l'url per NSURLRequest POST Body (iPhone-obiettivo-C)
- 4. C# WPF Metodo OnPaint alternativo?
- 5. Creare un cookie per NSURLRequest?
- 6. Metodo privato inlining
- 7. Qualsiasi metodo alternativo per la trasmissione di classi
- 8. RSpec: metodo privato Stub
- 9. Metodo alternativo per PIVOT-IN con supporto per sub-query
- 10. Un modo per richiamare un metodo privato?
- 11. Forza classe figlia per implementare metodo privato
- 12. Quando scade un NSURLRequest?
- 13. Alternativo del metodo any_number_of_times negli stub
- 14. Metodo privato in un'interfaccia C++?
- 15. Reindirizzamento laravel dal metodo privato
- 16. Qual è il metodo alternativo per "self.isTouchEnabled" in Cocos2d 2.0?
- 17. Privato è privato, quindi Perché java consente di accedere al metodo privato utilizzando la riflessione?
- 18. Confondere "l'override un metodo privato"
- 19. Test Metodo privato utilizzando Mockito
- 20. Correlare NSURLRequest con UIWebView
- 21. Errore: tentativo di chiamare il metodo privato
- 22. NSURLConnection/NSURLRequest supporto gzip
- 23. di override metodo del "privato" in Python
- 24. Metodo di test unitario privato - obiettivo C
- 25. Sovrascrittura di un metodo privato con Reflection
- 26. Flexbox alternativo per IE9
- 27. richiesta con NSURLRequest
- 28. NSURLRequest: Come cambiare httpMethod "GET" in "POST"
- 29. Come utilizzare NSURLRequest/NSURLConnection per scaricare un file mp3 nell'app?
- 30. NSURLRequest che imposta l'intestazione HTTP
Perché si desidera consentire i certificati HTTP non validi in primo luogo? –
Ciao .. il tuo problema è stato risolto ma per questo hai escluso il metodo sopra nel tuo codice sorgente? –