iOS NSURLConnection 和 AfNetworking免證書https鏈接

  1. NSURLConnectiongit

  1.1  首先添加代理 算法

    //uiViewController.h
    <NSURLConnectionDelegate,NSURLConnectionDataDelegate,NSURLConnectionDownloadDelegate>

   是否是所有須要三個我也沒有具體細究,反正全加上去就好了。
安全



1.2在.m文件裏面實現下面連個代理方法,代碼不須要更改任何地方,這是用來配置免證書的。服務器

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

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    if ([challenge previousFailureCount] ==0){
        NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
        [challenge.sender useCredential:credential forAuthenticationChallenge:challenge];
    }else{
        [[challenge sender]cancelAuthenticationChallenge:challenge];
    }
}

  1.3接下來以源碼形式打開info.plist 添加以下代碼:網絡

<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSExceptionDomains</key>
		<dict>
			<key>baidu.com</key>
			<dict>
				<key>NSIncludesSubdomains</key>
				<true/>
				<key>NSExceptionRequiresForwardSecurity</key>
				<false/>
				<key>NSExceptionAllowsInsecureHTTPLoads</key>
				<true/>
			</dict>
		</dict>
	</dict>

由於iOS對於https的加密算法有強度要求。在這裏能夠對指定的域名進行例外設置。使用的時候只須要把「baidu.com」換成本身服務器的域名就好了。dom

1.4而後就可使用NSURLConnection了:測試

//uiViewController.m
    /**
     *  1. 在 info.plist 文件裏打開App Transport Security Settings
     *  2. 再打開 Exception Domains
     *  3. 將裏面的baidu.com換成本身服務器的domian就能夠了
     *
     *  
     */
     //    1.設置請求路徑
         NSString *urlStr=[NSString stringWithFormat:@"https://www.baidu.com"];
         NSURL *url=[NSURL URLWithString:urlStr];
     //    2.建立請求對象
         NSURLRequest *request=[NSURLRequest requestWithURL:url];
     //    3.發送請求
         //發送同步請求,在主線程執行
    [NSURLConnection connectionWithRequest:request delegate:self];

1.5以後還須要實現幾個用來監聽狀態及接收數據的代理方法:ui

//uiViewController.m
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    NSLog(@"error:%@",error);
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    NSLog(@"--->%@",response.accessibilityValue);
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    NSString *result = [[NSString alloc] initWithData:data  encoding:NSUTF8StringEncoding];
    NSLog(@"____>%@",result);
}

這樣就可使用https鏈接服務器了。加密


2.AFNetworkingurl

這是個很通用的第三方網路鏈接庫,不少人都在使用,若是這個不能鏈接https那簡直太坑爹了。做爲一個牛逼的網絡鏈庫,它確定是對https有支持的,可是想使用卻得通過一番配置,只是這個配置要比NSURLConnection簡單太多了。

2.1 一樣的要盡行步驟1.3的配置。

2.2配置使用默認安全協議。

 // 1.請求管理者
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
    securityPolicy.allowInvalidCertificates = YES;
    mgr.securityPolicy = securityPolicy;

2.3建立網絡鏈接

[mgr GET:@"https://baidu.com" parameters:nil success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
        NSLog(@"%@",responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"請求失敗-%@", error);
    }];

做爲牛逼中的大牛逼,AFNetworking配置起來是否是簡單太多了。

demo地址:http://git.oschina.net/liaojinghui/HTTPS_TEST

OK,這樣就能夠爽快的跟測試妹紙~~~我說聊天。

相關文章
相關標籤/搜索