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

作者: 光明程辉 | 来源:发表于2016-10-31 00:25 被阅读1606次

    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 <UIKit/UIKit.h>
    
    @interface ViewController : UIViewController<NSURLConnectionDataDelegate>
    
    @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(@"=================didReceiveData=================");
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        NSLog(@"data:%@",dic);
    }
    
    //- (nullable NSInputStream *)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request{
    //    
    //}
    
    //上传数据委托,用于显示上传进度
    - (void)connection:(NSURLConnection *)connection   didSendBodyData:(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
    
    
    

    参考文章

    -iOS: HTTPS 与自签名证书
    -iOS - HTTPS
    -iOS安全系列之一:HTTPS
    -iOS安全系列之二:HTTPS进阶
    -Making HTTP and HTTPS Requests

    相关文章

      网友评论

        本文标题: https请求处理方式:信任一切证书

        本文链接:https://www.haomeiwen.com/subject/keguuttx.html