码迷,mamicode.com
首页 > 其他好文 > 详细

网络请求

时间:2014-09-18 03:16:23      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:服务器   网络   接口   get请求   post请求   

网络请求需要服务器地址即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=%@&region=%@&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 = nilNSError *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格式的字符串


















网络请求

标签:服务器   网络   接口   get请求   post请求   

原文地址:http://9178463.blog.51cto.com/9168463/1554484

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!