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, @ "银行" , @ "济南" ]; // 如果网址中存在中文,进行URLEncode NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // 2.构建网络URL对象, NSURL NSURL *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 ...
随机推荐
- Qt中2D绘图问题总结(一)----------基本的绘制与填充
刚刚开始学习Qt不久,才开始渐渐地熟悉基础内容,学习过程中的一些知识的总结和感悟希望通过博客记录下来,与大家分享学习的同时,也是对自己坚持下去的鞭策,废话不多说了,开始第一次的小总结吧. Qt提供了强 ...
- vue.js2.0的独立构建和运行时构建
转自:https://jingsam.github.io/2016/10/23/standalone-vs-runtime-only-build-in-vuejs2.html?utm_source=t ...
- Asp.net MVC 示例
public ActionResult Browse(string id){ using (musicstoreEntities db = new musicstoreEntities( ...
- javamail 发送附件
1.属性文件 mail.protocol=smtpmail.host=mail.port=mail.auth=truemail.timeout=25000mail.username=mail.pass ...
- 006-Map、Tuple、Zip实战解析
006-Map.Tuple.Zip实战解析 实战代码 Map实战 本身是映射,映射关系在实际中应用非常广泛,比如:配置信息都是Key-Value形式 键值对不存在下边关系 是一个immutable(不 ...
- c# 第一个实例 通哥
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- AspNetPager控件分页使用方法
AspNetPager控件官方下载地址:http://www.webdiyer.com/aspnetpager/ 把控件加到项目中(添加自定义控件的方法),并把它拖放到页面上 <asp:Scri ...
- 古典问题rabbit
/**古典问题: * 有一对兔子,从出生后第三个月起每个月都生一对兔子, * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死, * 问每个月的兔子总数为多少? * 程序分析:兔子的规律为数列: ...
- AXUre
[ Javascript ] 一.javascript能用来干什么? 1.数据的验证. 2.对动态这本写到网页当中. 3.可以对事件做出响应. 4.可以读写html 中的内室. 5.可以检测浏览器 6 ...
- php大力力 [047节] 寻找程序员的方法和应用
http://www.proginn.com 程序员客栈 程序员客栈是什么? 程序员客栈,程序员的经纪人.第一阶段,我们通过履历.作品.专业社区影响力.技能树帮助程序员立体地展现成就和价值,不被简历束 ...