NSURLConnection同步,异步与SSL
2012-05-30 17:56
155 查看
原文地址:http://qzc770707.blog.163.com/blog/static/3408275320105249566560/
通常在IPhone里用网络访问会用到NSURLConnection来做url链接请求,下面简单介绍一下: 1、同步请求 NSURL *url=[[NSURL alloc]initWithString:urlString]; NSMutableURLRequest *request=[[NSMutableURLRequest alloc]init]; NSError *err=nil; NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&err]; if(data==nil) { //if([err code]) NSLog(@"Code:%d,domain:%@,localizedDesc:%@",[err code], [err domain],[err localizedDescription]); } else { } 这种情况,通过一个静态方法,请求request,这种情况下,会一直阻塞,等到返回结果,简单易用 2、异步请求 NSURL *url=[[NSURL alloc]initWithString:urlString]; NSMutableURLRequest *request=[[NSMutableURLRequest alloc]init]; NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; [url release]; [request release]; if(connection) { receivedData = [[NSMutableData data] retain]; NSLog(@"intial done!"); } else { NSLog(@"sorry"); } 通过一个delegate来做数据的下载以及Request的接受等等消息,此处delegate:self,所以需要本类实现一些方法,并且定义receivedData做数据的接受 基本上要实现下面节歌方法 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSLog(@"get the whole response"); [receivedData setLength:0]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSLog(@"get some data"); [receivedData appendData:data]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { [connection release]; } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { [connection release]; NSLog(@"Connection failed! Error - %@ %@", [error localizedDescription], [[error userInfo] objectForKey:NSErrorFailingURLStringKey]); } 基本上这样就搞定了!!! 但是异步模式下带来了一个新的问题,很多情况下,网络请求不在主线程,或者界面等待网络结果,不在主线程的时候,调用线程如果生命周期over,下面这些可能都没有调用到,导致得不到想要得效果,所以需要在NSURLConnection请求后面加点东西来阻塞 while(!finished) { [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]; } 好了,现在我们看看SSL的问题,在NSURLConnnection本来有方法可以跳过ssl检查,可惜被apple无情的私有了,所以同步的数据请求肯定不行了,看看文档,只能通过异步delegate的方式了 - (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 ([trustedHosts containsObject:challenge.protectionSpace.host]) [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; } 第一个方法会根据你的URL来判断是否需要做认证 第二个方法是认证的过程,if ([trustedHosts containsObject:challenge.protectionSpace.host]),这行代码注释掉,就可以自动所有SSL通过,否则,你可以加一些Trust的hosts,其他的不通过就行了!!!
相关文章推荐
- NSURLConnection同步,异步与SSL
- NSURLConnection同步,异步与SSL
- NSURLConnection同步,异步与SSL
- NSURLConnection同步,异步与SSL
- NSURLConnection同步,异步与SSL
- NSURLConnection同步,异步与SSL
- NSURLConnection同步,异步与SSL
- NSURLConnection同步,异步与SSL
- iOS使用NSURLConnection发送同步和异步HTTP Request
- IOS学习篇之NSURLConnection, 异步同步
- NSURLConnection和NSMutableURLRequest 实现同步、异步请求
- NSURLConnection同步与异步请求
- NSURLConnection和NSMutableURLRequest 实现同步、异步请求
- NSURLConnection同步与异步请求 问题
- NSURLConnection同步与异步请求
- IOS网络篇10之NSURLConnection的使用(同步异步下载getpost)
- MySQL主从复制、主从复制(异步)、半同步复制、SSL复制
- IOS开发笔记-NSURLConnection同步请求和异步请求以及get方法,post方法
- NSURLConnection同步与异步请求
- OC-NSURLConnection-同步get、异步get、同步post、异步post