网络请求需要服务器地址即URL也叫接口:统一资源定位符, (形式:http: 超文本传输协议)
NSURL(将网址转换为NSURL对象) 创建NSURL对象创建网络请求 NSURLRequest NSMutableURLRequest将字符串转为NSData对象 NSData *parmData = [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 = [parmStr dataUsingEncoding:NSUTF8StringEncoding];(6),设置请求体 [request setHTTPBody:parmData];(7),设置请求方式 [request setHTTPMethod:@"POST"];三,网络连接网络链接分为两种:异步链接和同步链接同步和异步的区别:(1),同步连接:主线程去请求数据,当数据未请求完毕之前,其他操作一律不响应.会造成程序的假死现象.(2),异步连接:会单独开一个线程去处理网络请求,主线程依然处理用户交互.程序运行流畅我们常用的是异步链接1,GET请求的链接(1),同步链接 NSURLResponse *response = nil; NSError *error = nil; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];(2),异步链接需要服从议NSURLConnectionDataDelegate该协议又服从NSURLConnectionDelegate协议 [NSURLConnection connectionWithRequest:request delegate:self];2,POST请求的链接(1),同步链接NSData *data = [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格式的字符串