nsurlrequestのプライベート「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の小切手からできるだけ安全であり、同様に隠されています。
本当に愚かな回避策の1つは、独自のカテゴリ方法を作成することです。
@implementation NSURLRequest (IgnoreSSL)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
return YES;
}
@end
これは、AppleのプライベートAPIチェックによって取得されるはずですが、それでも同じことです(いつでも壊れる可能性があるプライベートで文書化されていないAPI [1]を使用してください)。実際、それはそのホストだけでなくすべてを許すので、それはさらに悪いです。
1]:プライベートAPI したほうがいい 公開されますが、それでもプライベートAPIです。
Setallowsanyhttpscertificateは、OS X 10.6.6で完全にサポートされていないようです。
10.6.6と言いましたか?たぶん私は「スノービスタ」と言うべきだった。
解決策ではなく、提案です。使用を考えましたか asihttprequestフレームワーク このため?このフレームワークは、あらゆる面で完全です。ドキュメントをチェックしてください、多分それはあなたにも役立つかもしれません。