iOS: webview 사용 (1) -- https 링크

UIWebview 를 사용 하여 https 사 이 트 를 불 러 올 때 웹 뷰 는 항상 NSURLError Domain code = - 1202 를 보고 하여 웹 페이지 를 불 러 오 는 데 실 패 했 습 니 다.자신의 인쇄 오류 와 인터넷 검색 은 인증서 가 효력 을 잃 었 기 때문에 https 는 하이퍼텍스트 보안 전송 프로 토 콜, 즉 하이퍼텍스트 전송 프로 토 콜 (HTTP) 과 SSL / TLS 의 조합 을 사용 하여 암호 화 통신 과 네트워크 서버 신분 에 대한 감정 을 제공 합 니 다.서버 가 자체 서명 인증 서 를 사용 할 때 UIWebView 는 자체 서명 인증 서 를 사용 할 수 없 기 때문에 불 러 오 는 데 실 패 했 습 니 다.
        해결 방법: you 're using a self - signed certificate, it' s necessary to add some additional code. Because by default iOS will reject all untrusted https connections.다음 두 가지 방법 을 다시 쓰 세 요.
-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace;
-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge;
#import "ClassCon.h"
//  For now, I've hard coded the IP address of my trusted server.
#define TRUSTED_HOST @"192.168.1.2"

@implementation ClassCon {
    NSMutableData *contentData;
    NSURLConnection *conn;
}
-(void) loadContent {
    contentData = [NSMutableData data];
    NSString *contentURL = @"our url";
    conn = [[NSURLConnection alloc] initWithRequest:
            [NSURLRequest requestWithURL:[NSURL URLWithString:contentURL]] delegate:self];

}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [contentData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Bad: %@", [error description]);
    ContentResponse *response = [[ContentResponse alloc]initWithRc:-999 andDescr:@"error" andAction:0];
    conn = nil;
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
        NSString *loadedContent = [[NSString alloc] initWithData:
                                     contentData encoding:NSUTF8StringEncoding];
        NSLog(@"Loaded content: %@",loadedContent);

    }

// ------------ ByPass ssl starts ----------
-(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:
(NSURLProtectionSpace *)protectionSpace {
    return [protectionSpace.authenticationMethod
            isEqualToString:NSURLAuthenticationMethodServerTrust];
}

-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:
(NSURLAuthenticationChallenge *)challenge {
    if (([challenge.protectionSpace.authenticationMethod
          isEqualToString:NSURLAuthenticationMethodServerTrust])) {
        if ([challenge.protectionSpace.host isEqualToString:TRUSTED_HOST]) {
            NSLog(@"Allowing bypass...");
            NSURLCredential *credential = [NSURLCredential credentialForTrust:
                                           challenge.protectionSpace.serverTrust];
            [challenge.sender useCredential:credential
                 forAuthenticationChallenge:challenge];
        }
    }
    [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}
// -------------------ByPass ssl ends
@end

좋은 웹페이지 즐겨찾기