首页 > 代码库 > 网络请求
网络请求
网络请求需要服务器地址即URL也叫接口:统一资源定位符, (形式:http: 超文本传输协议)
NSURL(将网址转换为NSURL对象) 创建NSURL对象
创建网络请求 NSURLRequest NSMutableURLRequest
将字符串转为NSData对象 NSData *parmData = http://www.mamicode.com/[parmStr dataUsingEncoding:NSUTF8StringEncoding];
设置请求体(网络请求对象调用) setHTTPBody:;设置请求方式(网络请求对象调用) setHTTPMethod:
NSURLConnection
一,网络请求有两种方式:(两种方式的目的都是传递参数)
1,GET请求 : (URL (服务器地址) + ? + 参数(参数都是key=value格式的))
2,POST请求
3,GET请求与POST请求的区别:
1.GET请求的接口会包含参数部分,参数会作为网址的一部分.服务器地址与参数之间通过 ? 来间隔.POST请求会将服务器地址与参数分开,请求接口中只有服务器地址,而参数会作为请求体的一部分,提交给后台服务器. 2.GET请求,参数会出现在接口中,不安全,而POST请求相对安全. 3.虽然GET请求与POST请求可以用来请求与提交数据,但是一般情况GET多用于从后台请求数据,POST多用于向后台提交数据.
二,两种请求过程
1,创建GET请求
(1),将网址初始化成OC字符串对象
如:
NSString *urlString = [NSString stringWithFormat:@"%@?query=%@®ion=%@&output=json&ak=6E823f587c95f0148c19993539b99295", kBusinessInfoURL,@"银行", @"济南"];
如果网址中存在中文,进行URLEncode转换
NSString *newURLString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
(2),构建网络URL对象,NSURL(将网址转换为NSURL对象)
NSURL *url = [NSURL URLWithString:newURLString];
(3),创建网络请求
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
2,创建POST请求
post请求需要创建参数字符串对象并将字符串对象转为NSData对象,设置请求体和请求方式,对于GET请求不能设置请求方式,但可以查看请求方式
(1),将网址初始化成OC字符串对象
NSString *urlString = [NSString stringWithFormat:@"%@", @"http://api.tudou.com/v3/gw"];
如果网址中存在中文,进行URLEncode转换
(2),构建网络URL对象,NSURL(将网址转换为NSURL对象)
NSURL *url = [NSURL URLWithString:urlString];
(3),创建网络请求(由于POST请求接收的数据是一段一段的需要拼接,因袭请求对象是可变的)
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];
(4),创建参数字符串对象,
NSString *parmStr = [NSString stringWithFormat:@"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10"];
(5),将字符串转为NSData对象 NSData *parmData = http://www.mamicode.com/[parmStr dataUsingEncoding:NSUTF8StringEncoding];(6),设置请求体 [request setHTTPBody:parmData];(7),设置请求方式 [request setHTTPMethod:@"POST"];三,网络连接
网络链接分为两种:异步链接和同步链接
同步和异步的区别:
(1),同步连接:主线程去请求数据,当数据未请求完毕之前,其他操作一律不响应.会造成程序的假死现象.(2),异步连接:会单独开一个线程去处理网络请求,主线程依然处理用户交互.程序运行流畅
我们常用的是异步链接
1,GET请求的链接
(1),同步链接
NSURLResponse *response = nil; NSError *error = nil;
NSData *data = http://www.mamicode.com/[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
(2),异步链接需要服从议NSURLConnectionDataDelegate
该协议又服从NSURLConnectionDelegate协议
[NSURLConnection connectionWithRequest:request delegate:self];
2,POST请求的链接
(1),同步链接
NSData *data = http://www.mamicode.com/[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
(2),异步链接,需要服从议NSURLConnectionDataDelegate
该协议又服从NSURLConnectionDelegate协议
[NSURLConnection connectionWithRequest:request delegate:self];
NSURLConnectionDataDelegate方法:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { length = [response expectedContentLength]; NSLog(@"%lld", length); //当收到服务器响应时,为data开辟空间,接下来服务器要返回数据 self.data = [NSMutableData data]; }
//当收到服务器返回的数据时触发,返回的可能是资源片段. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { //拼接数据 [self.data appendData:data]; CGFloat rate = self.data.length * 1.0 / length; NSLog(@"%.2f", rate); }
//当服务器返回所有数据时触发,数据返回完毕 - (void)connectionDidFinishLoading:(NSURLConnection *)connection { // self.data;//就是服务器返回的所有的数据 //解析 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@", dic); }
NSURLConnectionDelegate协议方法 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"error"); } - (void)viewDidLoad
四,请求完数据需对数据进行解析
XML解析两种解析原理: SAX解析:是一种基于事件回调的解析机制,就是使用协议以及代理.SAX解析是逐行解析,读入数据时只读入一行,一行一行的解析,所以SAX解析占用内存较小,适合于大数据解析 DOM解析:一次性将内容全部读入内存,将内容读成树形结构,逐层解析,适合小数据解析
JSON解析
对于JSONKit提供的解析方式,是为NSString,NSData添加分类的方式,在分类中添加了解析的方法.效率仅次于系统的. 将JSON格式数据解析成NSArray,NSDictionary.而为NSArray,NSDictionary添加的分类的方法,则是将OC的对象,转化为JSON格式的字符串
网络请求