IOS 网络请求
技术交流新QQ群:414971585
关于网络请求的重要性我想不用多说了吧。对于移动客户端来说,网络的重要性不言而喻。常见的网络请求有同步GET, 同步POST, 异步GET, 异步POST。今天来看一下四种网络请求的实现方式。
一、同步GET
|
1
2
3
4
5
6
7
8
9
10
11
12
|
// 1.将网址初始化成一个OC字符串对象NSString *urlStr = [NSString stringWithFormat:@"%@?query=%@®ion=%@&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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// 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
|
1
2
3
4
5
6
7
8
9
10
11
|
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
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// 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,我们经常使用的协议方法为一下几个:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// 服务器接收到请求时- (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多用于向后台提交数据。
同步和异步的区别:
同步链接:主线程去请求数据,当数据请求完毕之前,其他线程一律不响应,会造成程序就假死现象。
异步链接:会单独开一个线程去处理网络请求,主线程依然处于可交互状态,程序运行流畅。
原文源自:http://www.cocoachina.com/ios/20140919/9691.html
IOS 网络请求的更多相关文章
- 【转载】一步一步搭建自己的iOS网络请求库
一步一步搭建自己的iOS网络请求库(一) 大家好,我是LastDay,很久没有写博客了,这周会分享一个的HTTP请求库的编写经验. 简单的介绍 介绍一下,NSURLSession是iOS7中新的网络接 ...
- springmvc接口ios网络请求
springmvc: application/json;charset=utf-8的ios网络请求: 后台使用 @RequestBody注解参数接收:
- IOS 网络请求方式
iOS开发中的网络请求 今天来说说关于iOS开发过程中的网络请求. 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异 ...
- iOS 网络请求NSURLSession
iOS 7 和 Mac OS X 10.9 Mavericks 中一个显著的变化就是对 Foundation URL 加载系统的彻底重构. 现在已经有人在深入苹果的网络层基础架构的地方做研究了,所以我 ...
- IOS网络请求框架AFNetworking和ASIHttpRequest对比
ASI基于CFNetwork框架开发,而AFN基于NSURL. ASI更底层,请求使用创建CFHTTPMessageRef进行,使用NSOperationQueue进行管理,ASIHTTPReques ...
- iOS网络请求基础
这篇是关于网络请求的,结合公司的实际情况编写,如果有不同意见欢迎留言共同讨论. iOS在9.0之后彻底放弃了NSURLConnection,现在已经改用了NSURLSession进行网络请求.一般现在 ...
- IOS网络请求之NSURLSession使用
前言: 无论是Android还是ios都离不开与服务器交互,这就必须用到网络请求,记得在2013年做iOS的时候那时候用的ASIHTTPRequest框架,现在重新捡起iOS的时候ASIHTTPReq ...
- IOS网络请求之AFNetWorking 3.x 使用
前言: 计划把公司的网络请求与业务解耦,所以想着学习一下网络请求,最近学习了NSURLSession,今天来学习一下基于NSURLSession封装的优秀开源框架AFNetWorking 3.x,之前 ...
- iOS网络请求-AFNetworking源码解析
趁着端午节日,自己没有什么过多的安排,准备花4-5天左右,针对网络请求源码AFNetworking和YTKNetwork进行解析以及这两年多iOS实际开发经验(其实YTKNetwork也是对AFNet ...
随机推荐
- String.format介绍
java类中提供的一种方法:String.format(String format, Object ... args) 提供字符串格式化功能: 不同转换符实现不同数据类型到字符串的转换: %s--字符 ...
- Anagrams
这题Leetcode上面的描述不清楚.怎么也得举两个例子吧,不然谁懂? 题目的意思是,给定一些字符串,比如["abc","cba","bac" ...
- learn python, ref, diveintopython 分类: python 2015-07-22 14:42 14人阅读 评论(0) 收藏
for notes of learing python. // just ignore the ugly/wrong highlight for python code. ""&q ...
- windows7 64位系统pl/sql 客户端的安装
解压将下载到的将其解压,如我解压到了 E:\app\instantclient_11_2 3.设置PLSQL Developer在tools-prefrences,conncetion,OCI lib ...
- 64位计算机安装setuptool
Python Version 2.7 required, which was not found in the registry 新建注册表信息:HKEY_LOCAL_MACHINE\SOFTWARE ...
- xcode中得一个坑
因项目需求变动,我必须在coredata中的WorkLogModel表中添加一个字段:抄送人.起初我给这个字段起名为copyPerson,一切准备就绪后,发现从数据库读取这个copyPerson时,第 ...
- Java Base64 类
package org.yp.ypfinancing.core.service.payV2.domain.service.Sdp.utils; public final class Base64 { ...
- 关于ajax跨域请求(cross Domain)
Cross Domain AJAX主要就是A.com网站的页面发出一个XMLHttpRequest,这个Request的url是B.com,这样的请求是被禁止的,浏览器处于安全考虑不允许进行跨域访问, ...
- patchca验证码的使用
/** * 生成验证码 */ private static RandomFontFactory ff = null; // 自定义验证码图片背景 private static MyCustomBack ...
- SRS文档
1什么是用例? 在介始用例方法之前,我们首先来看一下传统的需求表述方式-"软件需求规约"(Software Requirement Specification).传统的软件需求规约 ...