说到网络通信,第一个想到的肯定就是IP地址.IP地址当然重要,但是Ip地址辣么长,而且都是数字,谁能天天记得住啊~~(好痛苦啊)!
所以就有了域名这种东东便于记忆.那么我们的网络通信当然要用到域名了,就是所谓的网址.
那么当然就要有一个能够访问的url,所以:
第一步:构建url:
所谓的构建url其实就是从网上找个接口,现在网上有许多的免费的结构可供大家选择.
比如这样http://apis.baidu.com/chazhao/idcard/idcard?idcard=“430224198508085219” & apikey=”您自己的apices”,
就是这种url,就是api接口.这种接口网上有许多.
- url后面的?是用来连接后面的那一堆和前面的那一堆的.
- ?后面的idcard是指明了这是一个参数的名字,还有后面的apikey也是一样的.=后面是参数的值.
- &是用来连接两个参数的,如果有三个参数那么后面还要在加上一个&符号,然后写参数的名字和值.
当然了如果参数有中文的话,那么需要特别注意了,中文需要编码:系统提供的函数:
- 在以前使用的是stringByAddingPercentEscapesUsingEncoding:函数,但是这个函数在iOS9就被废弃了
- 现在使用的stringByAddingPercentEncodingWithAllowedCharacters:函数,这个函数最低支持iOS7.使用这个函数编码之后的url只要是不没有网就可以被识别.小伙伴们在使用带有中文的url可能不会遇到问题,但是为了谨慎起见,还是使用函数编码之后的URL好一些.
第二步 构建请求:
构建完url之后,就该构建请求,那么说道构建请求,就要说说请求的种类了,请求的种类有好多
比如:GET, POST, HEAD, PUT, DELETE, OPTIONS, TRACE….
一般常用在网络通信之间的请求是get请求和post请求,这两种请求是有区别的,get请求的参数就像上面的那种,参数都会放在url后面与url拼接起来.
但是问题来了,既然get是这个样子,那么post是什么样子的呢.再说这个之前首先你要知道get请求的构建代码是怎么写的:
NSURLRequest * request = [NSURLRequest requestWithURL:url];
小伙伴们不难从这里看出来NSURLRequest给我的第一感觉是不够长,还有一种是NSMutableURLRequest 这种请求.这两个请求的区别是:
- 第一个请求是不可变的,也就是说一旦请求构建处理来以后,请求的中的参数不可以改变.
- 第二个请求是可变的,post请求就是用的这种方式创建的,示例:
/*如果是post请求请看第七部,否则请忽略第七部*/
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
第三步 就是构建会话了
系统提供了构建会话的函数(当然这个不是唯一的一种)
NSURLSession *urlSession = [NSURLSession sharedSession];
可以利用这个构建会话
第四步就是构建任务:
系统提供了好几种构建任务的方式这里只是其中的一种
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler
示例如下:
NSURLSessionDataTask *task = [urlSession dataTaskWithRequest:request completionHandler:^(NSData * data, NSURLResponse * response, NSError * error) {
if (!error) {
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"服务器返回的数据为:%@", responseString);
}
else
{
NSLog(@"请求错误:%ld, %@", error.code, error.localizedDescription);
}
}];
/*
第一个参数就是请求
第二个参数是一个block,是一个代码块(由于这种请求是异步的请求,所以你如果想在拿到数据之后还做一些什么事情的话可以写在这里)
*/
第五步 开始任务
当然最终要的就是要开启任务否则是不会发送请求的:
[task resume];
第六步 修改配置文件
不要以为这就完了,当然了这也差不多了.还有一点就是需要在你的info.plist中配置.
- 需要添加一行App Transport Security Settings 然后点击前面那个加号,再添加一行Allow Arbitrary Loads.将这个选项置为YES,好了大功告成!
第七步(post请求请看,否则请绕过!!)
当然如果要构建post请求那么需要在构建请求的时候向可变请求中添加参数如下:
// 设置请求方法
request.HTTPMethod = @"POST";
// 设置请求体
NSString *paramsString = @"userName=小明&password=123456";
// 字符串转化为data(由于请求体是NSData类型,所以需要将请求体添加转化成NSData类型)
NSData *data = [paramsString dataUsingEncoding:NSUTF8StringEncoding];
request.HTTPBody = data;