エラー:HTTP load failed(kCFstream Erromail、-9813)/Error Domain=NSURrrordoman Code=-1202
7866 ワード
エラー
アプリケーションでhttpからhttpsに変換した場合、エラーが発生しました。以下はエラーです。NSURLSession/NSURLConnect HTTP load failed(kCFstream Erromail、-9813)またはErromann=NSURLErroromain Code=1202「The certifite for this variver.」
原因
これはhttpsの証明書が失効したからです。または自己構築証明書が必要です。認証をスキップしてサーバーの接続を許可してください。
エラーの解決策を要求します。
1.一般的に、AFMを使うと以下のコードを追加できます。
ここでもポイントとして紹介している文章はATSに関するものです。App Transport Security(ATS)https自己構築証明書のAFMにおける設定ネットワーク要求と各種エラーコードの意味についてまとめました。
UICWebViewにおける解決策
アプリケーションでhttpからhttpsに変換した場合、エラーが発生しました。以下はエラーです。NSURLSession/NSURLConnect HTTP load failed(kCFstream Erromail、-9813)またはErromann=NSURLErroromain Code=1202「The certifite for this variver.」
原因
これはhttpsの証明書が失効したからです。または自己構築証明書が必要です。認証をスキップしてサーバーの接続を許可してください。
エラーの解決策を要求します。
1.一般的に、AFMを使うと以下のコードを追加できます。
AFSecurityPolicy * securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//allowInvalidCertificates ( ), NO
// , YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName , YES;
// , NO
// : , 。 SSL , www.google.com, mail.google.com ; , *.google.com, 。
securityPolicy.validatesDomainName = NO;
//validatesCertificateChain , YES
// YES, Trust Object , , :
//GeoTrust Global CA
// Google Internet Authority G2
// *.google.com
// , *.google.com , CA (GeoTrust Global CA, Google Internet Authority G2);
// , YES, ; CA , ;
securityPolicy.validatesCertificateChain = NO;
requestOperationManager.securityPolicy = securityPolicy;
2.まだ要求ができない場合、以下のコードをあなたの要求クラスに入れてみてもいいです。- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler{
NSLog(@"didReceiveChallenge");
// if([challenge.protectionSpace.host isEqualToString:@"api.lz517.me"] /*check if this is host you trust: */ ){
completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
// }
}
3.コードを入れたら、本人が遭遇した問題は解決しましたが、もしあなたの要求に問題があれば、以下のとこの問題を参考にしてもいいです。http://stackoverflow.com/questions/33827351/how-to-solve-this-nsurlsession-nsurlconnection-http-load-failed-kcfstreamerrord ここでもポイントとして紹介している文章はATSに関するものです。App Transport Security(ATS)https自己構築証明書のAFMにおける設定ネットワーク要求と各種エラーコードの意味についてまとめました。
UICWebViewにおける解決策
// 1.
// 2.
{
NSURLConnection *_urlConnection;
NSURLRequest *_request;
BOOL _authenticated;
}
#pragma mark - webview delegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"Did start loading: %@ auth:%d", [[request URL]absoluteString],_authenticated);
if (!_authenticated) {
_authenticated = NO;
_request = request;
_urlConnection = [[NSURLConnection alloc] initWithRequest:_request delegate:self];
[_urlConnection start];
return NO;
}
return YES;
}
#pragma mark - NURLConnection delegate
// We use this method is to accept an untrusted site which unfortunately we need to do, as our PVM servers are self signed.
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
NSLog(@"WebController Got auth challange via NSURLConnection");
if ([challenge previousFailureCount] == 0) {
_authenticated = YES;
NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
[challenge.sender useCredential:credential forAuthenticationChallenge:challenge];
}else{
[[challenge sender] cancelAuthenticationChallenge:challenge];
}
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"WebController received response via NSURLConnection");
// remake a webview call now that authentication has passed ok.
_authenticated = YES;
[self.webView loadRequest:_request];
// Cancel the URL connection otherwise we double up (webview + url connection, same url = no good!)
[_urlConnection cancel];
}
UICWebView to view self signed websites(No prvate api,not NSURLConnection)-is it possible?