https请求处理方式(信任一切证书)

ios https请求处理方式1:信任一切证书
处理方法 1:使用异步请求方式
2:证书信任的委托这样处理

-(BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection{ return true; } - (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{ NSLog(@"didReceiveAuthenticationChallenge %@ %zd", [[challenge protectionSpace] authenticationMethod], (ssize_t) [challenge previousFailureCount]); if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){ [[challenge sender]useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; [[challenge sender]continueWithoutCredentialForAuthenticationChallenge: challenge]; } }- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace{ return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; }

完整示例代码 UIViewController.h
#import @interface ViewController : UIViewController@end

UIViewController.m
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; //string 转 url编码 NSString *urlString = @"https://api.github.com/users/coolnameismy"; NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]]; NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10]; NSURLConnectionDataDelegate *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self]; [connection start]; }//请求失败 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"=================didFailWithError================="); NSLog(@"error:%@",error); }//重定向 - (nullable NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(nullable NSURLResponse *)response{ NSLog(@"=================request redirectResponse================="); NSLog(@"request:%@",request); return request; }//接收响应 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ NSLog(@"=================didReceiveResponse================="); NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response; NSLog(@"response:%@",resp); }//接收响应 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@"=================didReceiveDatahttps://www.it610.com/article/================="); NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; NSLog(@"data:%@",dic); }//- (nullable NSInputStream *)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request{ // //}//上传数据委托,用于显示上传进度 - (void)connection:(NSURLConnection *)connectiondidSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite{ NSLog(@"=================totalBytesWritten================="); }//- (nullable NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse{ // //}//完成请求 - (void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSLog(@"=================connectionDidFinishLoading================="); }#pragma mark -https认证 -(BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection{ return true; } - (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge{ NSLog(@"didReceiveAuthenticationChallenge %@ %zd", [[challenge protectionSpace] authenticationMethod], (ssize_t) [challenge previousFailureCount]); if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]){ [[challenge sender]useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; [[challenge sender]continueWithoutCredentialForAuthenticationChallenge: challenge]; } }- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace{ return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; }- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. }@end

参考文章 【https请求处理方式(信任一切证书)】-iOS: HTTPS 与自签名证书
-iOS - HTTPS
-iOS安全系列之一:HTTPS
-iOS安全系列之二:HTTPS进阶
-Making HTTP and HTTPS Requests

    推荐阅读