iOS开发中的网络请求

来源:互联网 发布:python for android 编辑:程序博客网 时间:2024/05/24 02:11

今天又打开了好久没写的博客,看了一下日期,距离上一次写博客正好一个月,这一个月,又学到了好多关于iOS开发的知识, 今天就来说说关于iOS开发过程中的网络请求。

关于网络请求的重要性我想不用多说了吧。对于移动客户端来说,网络的重要性不言而喻。常见的网络请求有同步GET, 同步POST, 异步GET, 异步POST。今天来看一下四种网络请求的实现方式。

一、同步GET

// 1.将网址初始化成一个OC字符串对象NSString *urlStr = [NSString stringWithFormat:@"%@?query=%@&region=%@&output=json&ak=6E823f587c95f0148c19993539b99295", kBusinessInfoURL, @"银行", @"济南"];// 如果网址中存在中文,进行URLEncodeNSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];// 2.构建网络URL对象, NSURLNSURL *url = [NSURL URLWithString:newUrlStr];// 3.创建网络请求NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];// 创建同步链接NSURLResponse *response = nil;NSError *error = nil;NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

当创建好同步链接以后, 就可以采用相应的方法进行解析。下面创建异步连接也是一样的。

二、同步POST

// 1.根据网址初始化OC字符串对象    NSString *urlStr = [NSString stringWithFormat:@"%@", kVideoURL];    // 2.创建NSURL对象    NSURL *url = [NSURL URLWithString:urlStr];    // 3.创建请求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    // 4.创建参数字符串对象    NSString *parmStr = @"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10";    // 5.将字符串转为NSData对象    NSData *pramData = [parmStr dataUsingEncoding:NSUTF8StringEncoding];    // 6.设置请求体    [request setHTTPBody:pramData];    // 7.设置请求方式    [request setHTTPMethod:@"POST"];        // 创建同步链接    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

三、异步GET

    NSString *urlStr = [NSString stringWithFormat:@"http://image.zcool.com.cn/56/13/1308200901454.jpg"];    NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    NSURL *url = [NSURL URLWithString:newStr];    NSURLRequest *requst = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];    //异步链接(形式1,较少用)    [NSURLConnection sendAsynchronousRequest:requst queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {        self.imageView.image = [UIImage imageWithData:data];        // 解析        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];        NSLog(@"%@", dic);    }];
四、异步POST

// POST请求    NSString *urlString = [NSString stringWithFormat:@"%@",kVideoURL];    //创建url对象    NSURL *url = [NSURL URLWithString:urlString];    //创建请求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10];    //创建参数字符串对象    NSString *parmStr = [NSString stringWithFormat:@"method=album.channel.get&appKey=myKey&format=json&channel=t&pageNo=1&pageSize=10"];    //将字符串转换为NSData对象    NSData *data = [parmStr dataUsingEncoding:NSUTF8StringEncoding];    [request setHTTPBody:data];    [request setHTTPMethod:@"POST"];    //创建异步连接(形式二)    [NSURLConnection connectionWithRequest:request delegate:self];

一般的,当创建异步连接时, 很少用到第一种方式,经常使用的是代理方法。关于NSURLConnectionDataDelegate,我们经常使用的协议方法为一下几个:

// 服务器接收到请求时- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{}// 当收到服务器返回的数据时触发, 返回的可能是资源片段- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{}// 当服务器返回所有数据时触发, 数据返回完毕- (void)connectionDidFinishLoading:(NSURLConnection *)connection{}// 请求数据失败时触发- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{    NSLog(@"%s", __FUNCTION__);}

最后,分析一下这几种呢网络请求的区别。

GET请求和POST请求的区别:

    1. GET请求的接口会包含参数部分,参数会作为网址的一部分,服务器地址与参数之间通过 ? 来间隔. POST请求会将服务器地址与参数分开,请求接口中只有服务器地址,而参数会作为请求的一部分,提交后台服务器

    2. GET请求参数会出现在接口中,不安全.POST请求相对安全

    3.虽然GET请求和POST请求都可以用来请求和提交数据,但是一般的GET多用于从后台请求数据, POST多用于向后台提交数据

同步和异步的区别:

   同步链接:主线程去请求数据,当数据请求完毕之前,其他线程一律不响应,会造成程序就假死现象

   异步链接:会单独开一个线程去处理网络请求,主线程依然处于可交互状态,程序运行流畅





0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 浏览器未正常加载相关控件怎么办 猫的眼睛发炎了怎么办 橡胶手机壳松了怎么办 橡胶手机壳小了怎么办 苹果手机下载不了软件了怎么办 苹果手机浏览器下载不了软件怎么办 小狗吃了硬的棉花怎么办 小狗吃了隔尿垫里的棉花怎么办 眼睫毛掉进眼睛里怎么办 爱掉头发怎么办吃什么 头皮屑多头发干燥脱发怎么办 剪了头发后悔了怎么办 2岁宝宝发际线高怎么办 脱发怎么办吃什么能长发 后面头发睡平了怎么办 鸟羽毛长得不好怎么办 吃激素药头发掉怎么办 吃了药头发掉怎么办 头皮痒头发掉的厉害怎么办 西昌学院被记过了怎么办? 初三了数学太差怎么办 板绘线条不流畅怎么办 嘴被风吹歪了怎么办 被风吹的嘴歪了怎么办 怀孕一个多月见红了怎么办 b本扣了6分怎么办 b牌驾驶证扣6分怎么办 忘记了谁考证的密码怎么办 专升本学校有课怎么办 跨境额度超了怎么办 微商代购被骗了怎么办 减肥到了瓶颈期该怎么办 大润发超市把一件商品打两件怎么办 小红书上买到假货怎么办 主动退市股票钱怎么办 老板卷款逃跑财务怎么办 房开延迟交房怎么办 房开逾期交房怎么办 买了保险想退保怎么办 辐射避难所探索废土死了怎么办 大门上边的齿轮滑丝怎么办