美文网首页
iOS网络篇-网络基础

iOS网络篇-网络基础

作者: 亲爱的大倩倩 | 来源:发表于2019-06-14 11:01 被阅读0次

项目中常见的客户端与服务端通信

可通信的内容(即访问服务器资源)

图片,文本,语音,视频,音乐

URL:决定了和谁通信
http://www.baidu.com:8888/list?name=123&age=18
协议:http://
主机名及端口号:www.baidu.com:8888
接口名称(路径): list
接口字段(查询条件):name=123
?为接口名称和接口字段的分割
&为参数的分割
HTTP: 超文本传输协议(HyperText Transfer Protocol)

用来实现客户端和服务器之间进行信息通信的协议,它提供了通信的标准和规范

常见的通信请求方法

1.GET:从服务器获取一段内容,不包含请求体
2.POST:使用客户端提供的数据更新实体
3.HEAD:获取响应的元数据而无需检索响应的全部内容
4.PUT:使用客户端提供的数据添加实体
5.DELETE:使用客户端提供吧的请求体来删除实体

iOS中的网络请求是如何进行的?

NSURL:用来标识客户端访问哪台服务器上的指定资源
NSURLRequest:用来标识客户端发起的网络请求内容
NSURLSession:用来表示客户端和服务器端建立起来的网络连接
NSURLResponse:表示服务端的响应结果

总结一下iOS的请求步骤是
  1. 创建NSURL
  2. 创建请求对象NSURLRequest
  3. 创建NSURLSession
  4. 根据NSURLSession创建NSURLSessionTask(有dataTaskWithURL和dataTaskWithRequest两种常见方法,GET方法可使用这两种方式,POST只能使用dataTaskWithRequest)
  5. 执行task
  6. 解析数据

Get请求

//表示访问的服务器地址
NSURL *url = [NSURL URLWithString:@"http://XXXXXXXX/传参"];
//表示客户端发起网络请求的请求内容, NSURLRequest默认的请求方式是Get
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//创建网络连接对象
NSURLSession *session = [NSURLSession sharedSession];
/*参数1:请求对象
参数2:completionHandler回调中
data为服务器返回的数据
response为响应头信息,是对服务端的描述
error为错误信息 **/
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        解析数据
    }];
//启动网络连接
[dataTask resume];

POST请求

1.不需要将参数拼接到URL中,需要设置到request中,格式不变
2.需要设置NSMutableURLRequest请求,因为他可以更改
3.更改request.httpMethod为POST
4.将GET中的拼接的参数拿出来,格式一样,将参数转换成NSData,然后设置为request.HTTPBody
5.其他和GET一样

NSURL *url = [NSURL URLWithString:@"http://XXXXXXXX"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
request.HTTPBody = [@"username=520it&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        解析数据
    }];
[dataTask resume];
Get和Post的区别

1.Get从服务器获取数据,Post向服务器发送数据
2.Get将参数拼接到URL后面,Post将请求参数放到Body里面
3.Get传送数据量小,Post传送数据量不受限制
4.Get安全性低,Post安全性高

因为苹果之前爆出了多起安全事件的影响,在iOS9中新增ATS(App Transport Security)特性,强制使用HTTPS进行网络请求,可以提升安全级别,但之前项目中仍会有HTTP请求,为了方便版本迭代,所以提供了键值属性,在info.plist文件中设置这个属性后,我们就可以使用HTTP请求

NSAppTransportSecurity
NSAllowsArbitraryLoads

解析网络返回数据

在代理中返回,数据并不是一次性返回的,是一段一段返回的,didReceiveData方法会调用多次,所以我们声明变量,在didReceiveData中做拼接,等到全部都返回,再调用didCompleteWithError方法.
解析是用的自带的NSJSONSerialization方法去解析

//表示访问的服务器地址
NSURL *url = [NSURL URLWithString:@"http://XXXXXXXX/传参"];
//表示客户端发起网络请求的请求内容, NSURLRequest默认的请求方式是Get
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];
[dataTask resume];

//下面是代理
<NSURLSessionDataDelegate>
@property (nonatomic, strong) NSMutableData *responseData;
//1.接收到服务器响应的时候调用该方法
//[NSOperationQueue mainQueue]   主队列:   代理方法在主线程中调用
//[[NSOperationQueue alloc]init] 非主队列: 代理方法在子线程中调用
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler{
    //在该方法中可以得到响应头信息,即response
    //需要使用completionHandler回调告诉系统应该如何处理服务器返回的数据,默认是取消的
    /*
     NSURLSessionResponseCancel = 0,        默认的处理方式,取消
     NSURLSessionResponseAllow = 1,         接收服务器返回的数据
     NSURLSessionResponseBecomeDownload = 2,变成一个下载请求
     NSURLSessionResponseBecomeStream        变成一个流
     */
    completionHandler(NSURLSessionResponseAllow);
}

//2.接收到服务器返回数据的时候会调用该方法,如果数据较大那么该方法可能会调用多次
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data{
    //拼接服务器返回的数据
    if(_responseData = nil){
        _responseData = [[NSMutableData alloc] init];
     }
    [self.responseData appendData:data];
}

//3.当请求完成(成功|失败)的时候会调用该方法,如果请求失败,则error有值
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{
    if(error == nil){
        //解析数据
       id obj= [NSJSONSerialization JSONObjectWithData:self.responseData options:kNilOptions error:nil];
        NSLog(@"%@",obj);
    }
}
常见的网络响应状态码

200: 正常
400: 错误请求
401: 未授权
404: 未找到
500: 内部服务器错误

HTTP和TCP的区别

1.HTTP建立在TCP的基础之上
2.TCP是长连接,HTTP是短连接,因为HTTP是每次TCP长连接后立即断开

传输层协议(TCP / UDP)

定义:告诉你传输数据的规则是怎么样的
socket是执行规则的实体,你按照TCP建立socket,socket就按照TCP的规则运转,也就是建立连接,运送包裹,确认包裹收到,运送下一个包裹,再次确认,断开连接.UDP建立的Socket就是建立连接,运包裹(不确认),运包裹(不确认),断开连接

应用层协议(HTTP网页,接口 / FTP文件下载 / SMTP电子邮件)

定义:你的实际用途是什么,他们就会在传输协议上做一层封装,传输数据用的也是TCP或UDP
http协议:相当于让你按照URL的方式进行网络传输,但是底层机制,也是将URL拆分,然后用TCP/IP协议建立传输请求socket,通讯完成后再断开

备注

TCP/IP协议(socket)
先跟服务器建立连接——开线程等待服务器连接通过——接收服务器连接成功的通知——发送消息
发送请求1——隔段时间继续发送情求1(可无)——对方收到后,给回执——收到回执,继续发送请求1
长连接: 建立连接——发消息1——发送消息2——发送消息3...发送完成,连接断开
常用于定位,导航,IM(即时通讯)
UDP协议
发送请求1——发送请求2——发送请求3
效率比较快,但不管对方有没有收到
HTTP协议
给个URL,传递参数即可
短连接:发消息1——建立连接——发送完成,连接断开
发消息2——建立连接——发送完成,连接断开
...
FTP协议
文件传输协议,用于下载文件

打个比方就是搬家,我们有一个包裹从5楼搬到车里,半小时以后还有一个包裹也要搬到车里,那么我需要开车门,把包裹放进去,关车门
如果我们一口气要有20个包裹从5楼搬到车里,不考虑安全因素,我们肯定更希望是,开车门,运包裹1,包裹2,...包裹20,最后关车门
socket你就可以是想象成车钥匙,他的作用是帮你打开车门,关闭车门,其实还包含运送包裹

网上下载高清电影的协议是ftp

formal配置的邮箱是smtp的


相关文章

  • iOS网络篇-网络基础

    项目中常见的客户端与服务端通信 可通信的内容(即访问服务器资源) 图片,文本,语音,视频,音乐 URL:决定了和谁...

  • 文章汇总

    ios iOS 网络篇 网络基础总结 支付宝集成 iOS支付宝支付集成 - demo例子集 - 博客园 理解 iO...

  • iOS 基础网络篇

    多线程 NSThread GCD队列并发队列全局队列自己创建串行队列自己创建主队列任务:block函数sync:同...

  • iOS开发网络篇—网络编程基础

    iOS开发网络篇—网络编程基础 一、为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1...

  • iOS架构篇-3 网络接口封装

    iOS架构篇-3 网络接口封装 关键字:iOS,网络接口封装,Alamofire,swift 网络接口API通常都...

  • NSURLSession

    iOS开发网络篇

  • iOS网络基础

    iOS网络编程中会涉及一些协议(HTTP/HTTPS)和计算机网络相关概念,只有了解它们的相关机制和概念才能在实际...

  • iOS 网络 基础

    AFNetworking 很棒的HTTP网络通信库 asi-http-request 一个HTTP库 同样很知...

  • iOS 网络基础

    一. 基础概念 1. 计算机网络体系结构分层 2.TCP/IP TCP/IP协议并不是单纯的指TCP协议/IP协议...

  • iOS网络篇-网络协议

    1.什么是HTTP2.理解HTTPS,SSL,TLS的工作原理3.网络请求在iOS10+之后的使用注意事项,适配苹...

网友评论

      本文标题:iOS网络篇-网络基础

      本文链接:https://www.haomeiwen.com/subject/mniefctx.html