数据请求
来源:互联网 发布:java构造方法特点 编辑:程序博客网 时间:2024/06/09 18:22
今天来说说关于iOS开发过程中的网络请求。
关于网络请求的重要性我想不用多说了吧。对于移动客户端来说,网络的重要性不言而喻。常见的网络请求有同步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多用于向后台提交数据。
同步和异步的区别:
同步链接:主线程去请求数据,当数据请求完毕之前,其他线程一律不响应,会造成程序就假死现象。
异步链接:会单独开一个线程去处理网络请求,主线程依然处于可交互状态,程序运行流畅。
0 0
- 数据请求
- 请求数据
- 数据请求
- 请求数据
- 请求数据
- 请求数据
- HttpPost请求方式请求数据
- XML 数据请求与JSON 数据请求
- 网络数据请求
- ActionInvocation,(请求)数据对象
- qml 请求网络数据
- Request获取请求数据
- 异步请求数据__flash
- JQuery请求JSON数据
- NSURLConnection请求网页数据
- ASIHTTPRequest异步请求数据
- ASIHTTPRequest 保存请求数据
- ASIHTTPRequest请求网页数据
- Nginx实战基础篇一 源码包编译安装部署web服务器
- javaScript中的 if(123) | return | arguments对象
- 第八周 课后实践:阅读程序(4)
- 第6周RFID作业
- MailBox writeup(step1)
- 数据请求
- MFC常用方法总结一
- GPUIMAGE说明
- 线程同步
- Linux 目录详解
- 8-3简要说明RFID系统的时隙ALOHA算法的工作过程
- 真正学习Java的第一天
- sgu211:Strange Counter(构造)
- 【tcp-ip学习总结】基础UDP实现的简单通信功能小程序