1、get:
01.<span
style="font-size:14px;">NSString
* URLString = @"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getSupportCityDataset?theRegionCode=广东";02.NSURL
* URL = [NSURL URLWithString:[URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];03. 04.NSURLRequest
* request = [[NSURLRequest alloc]initWithURL:URL];05.NSURLResponse
* response = nil;06.NSError
* error = nil;07.NSData
* data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];08.if (error)
{09.NSLog(@"error:
%@",[error
localizedDescription]);10.}else{11.NSLog(@"response
: %@",response);12.NSLog(@"backData
: %@",[[NSString
alloc]initWithData:data encoding:NSUTF8StringEncoding]);13.}14.</span>
用字符串构建NSURL,最好在使用URLWithString的时候把原字符串进行一下UTF8转码,关于为何要转码,看下这里第一部分。然后NSURL对象构建NSURLRequest,使用NSURLConnection的同步方法,传入request对象就可以通过get方法获取数据。
这里有个NSError对象地址传入,用于做错误判断,网络的实际情况是多变的,必须要考虑请求错误的情况,否则可能导致程序奔溃。
2、post:
01.NSString
* URLString = @"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getSupportCityString";02.NSURL
* URL = [NSURL URLWithString:[URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];03. 04.NSString
* postString = @"theRegionCode=广东";05.NSData
* postData = [postString dataUsingEncoding:NSUTF8StringEncoding]; //将请求参数字符串转成NSData类型06. 07.NSMutableURLRequest
* request = [[NSMutableURLRequest alloc]init];08.[request
setHTTPMethod:@"post"]; //指定请求方式09.[request
setURL:URL]; //设置请求的地址10.[request
setHTTPBody:postData]; //设置请求的参数11. 12.NSURLResponse
* response;13.NSError
* error;14.NSData
* backData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];15. 16.if (error)
{17.NSLog(@"error
: %@",[error
localizedDescription]);18.}else{19.NSLog(@"response
: %@",response);20.NSLog(@"backData
: %@",[[NSString
alloc]initWithData:backData encoding:NSUTF8StringEncoding]);21.}
3、同步和异步请求:
一般网络请求都需要一段时间,哪怕数据再少、网络再好,都会有一段时间,而且很多时候必须考虑在网络不好的时候的app状态。使用同步请求只需安心等待数据就可以,不需要做额外操作,上面两例都是同步请求,connection调用方法后会把返回请求的数据,无需做什么其他事。但是同步会阻塞线程,如果通过点击button来发起请求,那么按钮会停留在highLight状态直到请求结束,会造成一种app卡住、死机的感觉,很不好。
异步get:
1.NSString
* URLString = @"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getSupportCityDataset?theRegionCode=广东";2.NSURL
* URL = [NSURL URLWithString:[URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];3. 4.NSURLRequest
* request = [[NSURLRequest alloc]initWithURL:URL];5. 6._connection
= [[NSURLConnection alloc]initWithRequest:request delegate:self]; (1)
协议方法:
要注意的是这里有两个委托:NSURLConnectionDataDelegate和NSURLConnectionDelegate,前一个继承于后一个,获取数据的方法是定义在前一个委托里面的,所以只要遵循NSURLConnectionDataDelegate就可以了。
一般用到四个委托方法:
01.<pre
name="code" class="objc">//接受到respone,这里面包含了HTTP请求状态码和数据头信息,包括数据长度、编码格式等02.-(void)connection:(NSURLConnection
*)connection didReceiveResponse:(NSURLResponse *)response{ NSLog(@"response
= %@",response);
_backData = [[NSMutableData alloc]init];03.}04. 05.//接受到数据时调用,完整的数据可能拆分为多个包发送,每次接受到数据片段都会调用这个方法,所以需要一个全局的NSData对象,用来把每次的数据拼接在一起06.-(void)connection:(NSURLConnection
*)connection didReceiveData:(NSData *)data{07.[_backData
appendData:data];08.}09. 10.//数据接受结束时调用这个方法,这时的数据就是获得的完整数据了,可以使用数据做之后的处理了11.-(void)connectionDidFinishLoading:(NSURLConnection
*)connection{12.NSLog(@"%@",[[NSString
alloc]initWithData:_backData encoding:NSUTF8StringEncoding]);13.}14. 15.//这是请求出错是调用,错误处理不可忽视16.-(void)connection:(NSURLConnection
*)connection didFailWithError:(NSError *)error{17.if (error.code
== NSURLErrorTimedOut) {18.NSLog(@"请求超时");19.}20.NSLog(@"%@",[error
localizedDescription]);21.}1. 1.
1. 1.NSURLRequest
* request = [[NSURLRequest alloc]initWithURL:URL cachePolicy:0 timeoutInterval:8.0];</span>1.NSMutableURLRequest
* request = [[NSMutableURLRequest alloc]initWithURL:URL];2.[request
setTimeoutInterval:8.0];1.-(void)connection:(NSURLConnection
*)connection didFailWithError:(NSError *)error版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/yangchen9931/article/details/46783485