iOS UIWebView 로 딩 https 사이트 에 NSURLConnection/CFURLConnection HTTP load failed
다음은 제 가 https 사 이 트 를 불 러 올 때 발생 한 오류 입 니 다.
error:
NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)
HTTPS 하이퍼텍스트 전송 보안 프로 토 콜(줄 임 말:HTTPS,영어:Hypertext Transfer Protocol Secure)은 하이퍼텍스트 전송 프로 토 콜 과 SSL/TLS 의 조합 입 니 다.
HTTPS 의 주요 사상 은 안전 하지 않 은 네트워크 에 보안 채널 을 만 들 고 적당 한 암호 화 패키지 와 서버 인증 서 를 사용 하면 검증 되 고 신뢰 할 수 있 을 때 도청 과 브로커 공격 에 합 리 적 인 보 호 를 제공 하 는 것 이다.
HTTPS 의 신뢰 계승 은 브 라 우 저 에 미리 설 치 된 인증서 발급 기관(예 를 들 어 VeriSign,Microsoft 등)을 기반 으로 합 니 다.따라서 특정한 사이트 에 가 는 HTTPS 연결 은 신뢰 를 받 을 수 있 습 니 다.만약 에 서버 가 자신의 https 를 구축 하면 자체 인증 방식 으로 https 채널 을 만 드 는 것 입 니 다.그러면 클 라 이언 트 에서 신뢰 를 받 지 못 하기 때문에 저 희 는 보통 브 라 우 저 에서 https 사이트 에 방문 할 때 계속 하 느 냐 는 힌트 가 있 습 니 다.
웹 뷰 를 사용 하여 https 사 이 트 를 불 러 올 때 도 이러한 상황 이 발생 합 니 다.즉,요청 할 때 이 사 이 트 를 안전 하 게 설정 해 야 계속 방문 할 수 있 습 니 다.
그래서 우 리 는 웹 뷰 에서 웹 페이지 를 불 러 오기 시작 할 때 먼저 이 사이트 가 https 사이트 인지 아 닌 지 를 판단 해 야 합 니 다.만약 그렇다면 먼저 그 가 불 러 오 는 것 을 중단 하고 먼저 사용 해 야 합 니 다.
NSURLConnection 은 변 경 된 사이트 에 방문 한 다음 인증 할 때 이 사 이 트 를 신뢰 할 수 있 는 사이트 로 설정 합 니 다.그리고 웹 뷰 로 요청 을 다시 불 러 옵 니 다.
#pragma mark - UIWebViewDelegate
- (BOOL)webView:(UIWebView *)awebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString* scheme = [[request URL] scheme];
NSLog(@"scheme = %@",scheme);
// https
if ([scheme isEqualToString:HTTPS]) {
// https: , NSURLConnection 。 URL 。
if (!self.isAuthed) {
originRequest = request;
NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn start];
[awebView stopLoading];
return NO;
}
}
NSURL *theUrl = [request URL];
self.currenURL = theUrl;
return YES;
}
NSURLConnection 에이전트 에서 신뢰 문 제 를 처리 합 니 다.
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
if ([challenge previousFailureCount]== 0) {
_authed = YES;
//NSURLCredential 。 。
NSURLCredential* cre = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
[challenge.sender useCredential:cre forAuthenticationChallenge:challenge];
}
}
마지막 으로 NSURLConnection 에이전트 에서 응답 을 받 은 후 웹 뷰 를 사용 하여 https 사 이 트 를 다시 불 러 옵 니 다.
#pragma mark ================= NSURLConnectionDataDelegate
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response
{
NSLog(@"%@",request);
return request;
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
self.authed = YES;
//webview 。
[webView loadRequest:originRequest];
[connection cancel];
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.