IOS开发之NSURL网络请求,同步异步,GET,POST
2013-08-01 16:32
926 查看
同步请求与异步请求的区别:
(1)同步请求下载会阻塞线程,会使用户失去与UI的交互,出现程序卡死现象。异步请求下载不会阻塞主线程,而会建立一个新的线程来做操作。
(2)异步请求的操作步骤与同步有差别,需要网络连接代理方法来实现。需要加协议:NSURLConnectionDataDelegate,NSURLConnectionDelegata
(一)同步GET请求
异步加载数据的几个代理方法--用来接收数据。4.5.6步是必须得实现的
注:
(1)GET请求:将参数直接写在了访问路径上;如:http://api.tudou.com/v3/gw?method=item.ranking&appKey=72321d5b9ba5a8d0&format=json&pageNo=1&pageSize=10&channelId=30&inDays=30&sort=c,参数容易被外界看到,安全性不高。
POST请求:将参数放到body里面;如:http://api.tudou.com/v3/gw?(?之后的就是参数),外界看不到参数,安全性比较高
(2)POST创建的NSURL是不带参数的,需要将请求的参数放入Boby中,所以得用NSMutableURLRequest来创建请求。
(三)异步POST请求
(1)同步请求下载会阻塞线程,会使用户失去与UI的交互,出现程序卡死现象。异步请求下载不会阻塞主线程,而会建立一个新的线程来做操作。
(2)异步请求的操作步骤与同步有差别,需要网络连接代理方法来实现。需要加协议:NSURLConnectionDataDelegate,NSURLConnectionDelegata
(一)同步GET请求
-(void)startsyncGetRequest { //1.创建URL。 NSURL *url = [NSURL URLWithString:@"http://api.tudou.com/v3/gw?method=item.ranking&appKey=72321d5b9ba5a8d0&format=json&pageNo=1&pageSize=10&channelId=30&inDays=30&sort=c"]; //2.通过URL创建NSURLRequest---cachePolicy:缓存协议;timeoutInterval:网络请求超时时间 NSURLRequest *request = [NSURLRequest requestWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15]; NSURLResponse *response = nil;//3.用于接受服务器返回的响应 NSError *error = nil;//4.用于接受网络访问过程中出现的错误 //5.建立网络连接NSURLConnection,同步请求数据--(receivedData中保存的就是网络下载的数据,接下来只需要数据解析就行) NSData *receivedData = [NSURLConnection sendSynchronousRequest:requestreturningResponse:&response error:&error]; }(二)异步GET请求
-(void)startAsyncGETRequest { //1.创建url. NSURL *url = [NSURL URLWithString:@"http://api.tudou.com/v3/gw?method=item.ranking&appKey=72321d5b9ba5a8d0&format=json&pageNo=1&pageSize=10&channelId=30&inDays=30&sort=c"]; //2.创建request. NSURLRequest *request = [NSURLRequest requestWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15]; //3.建立网络连接,异步的response在专门的代理方法里实现。 [NSURLConnection connectionWithRequest:request delegate:self]; }
异步加载数据的几个代理方法--用来接收数据。4.5.6步是必须得实现的
//4. 接收服务器反应--接收到服务器回应的时候此方法会被调用 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { _receiveData = [[NSMutableData alloc] init]; NSHTTPURLResponse *responses = (NSHTTPURLResponse*)response; NSLog(@"%d",[responses statusCode]); } //5.接收服务器数据--接收到服务器传输数据的时候调用,按数据大小执行若干次 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [_receiveData appendData:data]; } //6.显示数据--数据传输完之后调用,得到最终的receiveData -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSString *requestInfo = [[NSString alloc] initWithData:_receiveDataencoding:NSUTF8StringEncoding]; NSLog(@"%@",requestInfo); } //7.网络请求过程中,出现错误的时候会调用(断网,连接超时) -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"%@",[error localizedDescription]); }
注:
(1)GET请求:将参数直接写在了访问路径上;如:http://api.tudou.com/v3/gw?method=item.ranking&appKey=72321d5b9ba5a8d0&format=json&pageNo=1&pageSize=10&channelId=30&inDays=30&sort=c,参数容易被外界看到,安全性不高。
POST请求:将参数放到body里面;如:http://api.tudou.com/v3/gw?(?之后的就是参数),外界看不到参数,安全性比较高
(2)POST创建的NSURL是不带参数的,需要将请求的参数放入Boby中,所以得用NSMutableURLRequest来创建请求。
(三)异步POST请求
-(void)startAsyncPOSTRequest { NSURL *url = [NSURL URLWithString:@"http://api.tudou.com/v3/gw?"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15]; //3.设置request是GET请求还是POST请求,默认是GET请求。 [request setHTTPMethod:@"POST"];。 ( 注:下面三句表示:将参数转为NSData类型,放入request的Boby中---) //4.参数转为nsstring型。 NSString *arguments = [NSStringstringWithFormat:@"method=item.ranking&appKey=72321d5b9ba5a8d0&format=json&pageNo=1&pageSize=10&channelId=30&inDays=30&sort=c"]; //5.将string型参数转为NSData型。 NSData *data = [arguments dataUsingEncoding:NSUTF8StringEncoding]; //6.设置request的Body为data。 [request setHTTPBody:data]; //7.根据request请求建立网络连接。 [NSURLConnection connectionWithRequest:request delegate:self]; }
相关文章推荐
- iOS开发:网络请求之get、post同步异步请求
- iOS网络请求GET&POST,同步&异步
- IOS开发笔记-NSURLConnection同步请求和异步请求以及get方法,post方法
- iOS陆哥开发笔记(二十七) (同步、异步请求, GET、POST请求)
- IOS网络请求(同步GET,同步POST,异步GET,异步POST)
- iphone 开发第七天 - IOS之同步请求、异步请求、GET请求、POST请求
- iOS海哥开发笔记 (海哥原创,iOS 之同步请求、异步请求、GET请求、POST请求 )
- iOS开发-Get请求,Post请求,同步请求和异步请求
- IOS开发—网络请求之GET/POST同步请求
- IOS开发—网络请求之GET/POST异步请求(非代理)
- 【iOS开发-网络】使用NSURLSessionDataTask发送get和post请求
- iOS开发 -- GET 和 POST请求(同步异步链接)
- iOS网络请求总结、GET、POST、同步、异步代码块、异步代理、第三方AFNetWorking2.0使用
- iOS 网络请求数据 同步请求、异步请求、GET、POST请求
- iOS-网络-同步请求、异步请求、GET请求、POST请求
- iOS 网络编程(HTTP 同步GET请求,同步POST请求,异步GET请求,异步POST请求)
- iOS小明开发笔记(二十六) (同步、异步请求, GET、POST请求)
- IOS之同步请求、异步请求、GET请求、POST请求(转)
- IOS之同步请求、异步请求、GET请求、POST请求
- UI14_GET-POST-BLOCK(网络请求的同步异步)