Как позвонить по URL-адресу https в uiwebview?
У меня есть URL HTTPS. Он загружается в iPhone Safari, но не работает в UIWebView
,
Ошибка:
Ошибка загрузки HTTP NSURLConnection/CFURLConnection (kCFStreamErrorDomainSSL, -9813)
Как я могу исправить эту проблему?
1 ответ
Я объяснил ниже, как получить доступ к URL-адресу https в UIWebview, это поможет вам решить проблему, потому что это работает для меня.
Вызов http такой же, как https URL.
Однако, если вы используете самозаверяющий сертификат, необходимо добавить дополнительный код. Так как по умолчанию iOS отклоняет все ненадежные соединения https.
Ограничение ненадежных подключений является очень хорошим поведением по умолчанию, и любое его отключение очень рискованно. Поэтому мы будем показывать предупреждение, так как собираемся обходить поведение по умолчанию.
-(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
Надеюсь это поможет