在做iOS开发过程中很重要的一项工作就是对网络数据进行下载和解析,虽然有很多相关的第三方能够很好的完成这些工作,但对开发者而言,能够了解整个网络请求的流程能够帮助我们更好的对数据进行操作。
首先介绍一下两种网络请求方式。
一、GET和POST请求
先看一个网址:“http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213”;
上面的网址可以被?分为两部分,当使用GET请求方式时,输入上面全部内容获取数据;当使用POST请求方式时,用?的前半部分作为URL,后半部分作为BODY。至于两种请求方式的区别,我们以后再说,这里只单纯的讲使用方法。
二、GET和POST请求方式的使用
先写GET请求的方式:
//1.创建URL
NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"];
//2.创建会话session
NSURLSession *session = [NSURLSession sharedSession];
//3.创建task(内部处理了请求,默认就是GET,直接传URL就行)。
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"%@",data);
NSLog(@"%ld",error.code)
}];
//4.启动任务
[dataTask resume];
再看POST请求的方式:
// 1.创建URL
NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
// 2.创建请求对象
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 3.设置请求方式
[request setHTTPMethod:@"POST"];
// 4. 设置请求的内容
NSData *bodyData = [@"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:bodyData];
// 5. 创建会话
NSURLSession *session = [NSURLSession sharedSession];
// 6.创建task
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"%@",data);
NSLog(@"%ld",error.code)
}];
// 7.开始任务
[dataTask resume];
这样网络请求的任务就创建成功了,需要注意的是由于系统默认的网络请求方式是GET,所以当使用POST请求方式时,需要使用上面的第三部,否则失败。
以上均为异步请求方式,由于同步请求会导致APP所有功能暂时停用,用户体验不好,使用的地方不多,所以本文不做介绍
三、两种请求方式的差异
GET请求直接将请求的参数写在地址里,使用起来非常简单,而且请求的地址有限,最多只有255个字节。
POST请求将地址和请求参数分开,所以body可以做的比较大一些,最多多少还没有试过,但绝对够用。有人说POST请求的安全性要比GET方式高,我并不这么认为。因为POST请求的body可以加密,当body在服务器解密后才可以读取,这时如果body中包含有病毒,对服务器对威胁是巨大的。所以安全性的问题就仁者见仁智者见智吧。