网络七层 以及iOS开发中的get请求 post请求

序言:

大部分应用程序都或多或少会牵扯到网络开发,例如微博微信,这些应用本身肯能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,鼓励的应用通常是没有生命力的.

网络七层

OSI七层模型基础知识及各层常见应用

OSI Open Source Initiative(简称OSI,有译作开放源代码促进会、开放原始码组织)是一个旨在推动开源软件发展的非盈利组织。OSI参考模型(OSI/RM)的全称是开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它是由国际标准化组织ISO提出的一个网络系统互连模型。它是网络技术的基础,也是分析、评判各种网络技术的依据,它揭开了网络的神秘面纱,让其有理可依,有据可循。

一、 OSI参考模型知识要点

图表 1:OSI模型基础知识速览

模型把网络通信的工作分为7层。1至4层被认为是低层,这些层与数据移动密切相关。5至7层是高层,包含应用程序级的数据。每一层负责一项具体的工作,然后把数据传送到下一层。由低到高具体分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

第7层应用层—直接对应用程序提供服务,应用程序可以变化,但要包括电子消息传输

第6层表示层—格式化数据,以便为应用程序提供通用接口。这可以包括加密服务

第5层会话层—在两个节点之间建立端连接。此服务包括建立连接是以全双工还是以半双工的方式进行设置,尽管可以在层4中处理双工方式

第4层传输层—常规数据递送-面向连接或无连接。包括全双工或半双工、

流控制和错误恢复服务

第3层网络层—本层通过寻址来建立两个节点之间的连接,它包括通过互连网络来路由和中继数据

第2层数据链路层—在此层将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址

第1层物理层—原始比特流的传输

电子信号传输和硬件接口数据发送时,从第七层传到第一层,接受方则相反。

各层对应的典型设备如下:

应用层 ……………….计算机:应用程序,如FTP,SMTP,HTTP

表示层 ……………….计算机:编码方式,图像编解码、URL字段传输编码

会话层 ……………….计算机:建立会话,SESSION认证、断点续传

传输层 ……………….计算机:进程和端口

网络层…………………网络:路由器,防火墙、多层交换机

数据链路层………..…..网络:网卡,网桥,交换机

物理层…………………网络:中继器,集线器、网线、HUB

二、 OSI基础知识

OSI/RM参考模型的提出
世界上第一个网络体系结构由IBM公司提出(74年,SNA),以后其他公司也相继提出自己的网络体系结构如:Digital公司的DNA,美国国 防部的TCP/IP等,多种网络体系结构并存,其结果是若采用IBM的结构,只能选用IBM的产品,只能与同种结构的网络互联。

  为了促进计算机网络的发展,国际标准化组织ISO于1977年成立了一个委员会,在现有网络的基础上,提出了不基于具体机型、操作系统或公司的网络体系结构,称为开放系统互联模型(OSI参考,open system interconnection)

OSI的设计目的
OSI模型的设计目的是成为一个所有销售商都能实现的开放网路模型,来克服使用众多私有网络模型所带来的困难和低效性。OSI是在一个备受尊敬的国际标准团体的参与下完成的,这个组织就是ISO(国际标准化组织)。什么是OSI,OSI是Open System Interconnection 的缩写,意为开放式系统互联参考模型。在OSI出现之前,计算机网络中存在众多的体系结构,其中以IBM公司的SNA(系统网络体系结构)和DEC公司的DNA(Digital Network Architecture)数字网络体系结构最为著名。为了解决不同体系结构的网络的互联问题,国际标准化组织ISO(注意不要与OSI搞混)于1981年制定了开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM)。这个模型把网络通信的工作分为7层,它们由低到高分别是物理层(Physical Layer),数据链路层(Data Link Layer),网络层(Network Layer),传输层(Transport Layer),会话层(Session Layer),表示层(Presentation Layer)和应用层(Application Layer)。第一层到第三层属于OSI参考模型的低三层,负责创建网络通信连接的链路;第四层到第七层为OSI参考模型的高四层,具体负责端到端的数据通信。每层完成一定的功能,每层都直接为其上层提供服务,并且所有层次都互相支持,而网络通信则可以自上而下(在发送端)或者自下而上(在接收端)双向进行。当然并不是每一通信都需要经过OSI的全部七层,有的甚至只需要双方对应的某一层即可。物理接口之间的转接,以及中继器与中继器之间的连接就只需在物理层中进行即可;而路由器与路由器之间的连接则只需经过网络层以下的三层即可。总的来说,双方的通信是在对等层次上进行的,不能在不对称层次上进行通信。

  OSI 标准制定过程中采用的方法是将整个庞大而复杂的问题划分为若干个容易处理的小问题,这就是分层的体系结构办法。在OSI中,采用了三级抽象,既体系结构,服务定义,协议规格说明。

OSI划分层次的原则

   网络中各结点都有相同的层次

  不同结点相同层次具有相同的功能

  同一结点相邻层间通过接口通信

  每一层可以使用下层提供的服务,并向上层提供服务

  不同结点的同等层间通过协议来实现对等层间的通信

OSI/RM分层结构

   对等层实体间通信时信息的流动过程

  对等层通信的实质:

  对等层实体之间虚拟通信;下层向上层提供服务;实际通信在最底层完成在发送方数据由最高层逐渐向下层传递,到接收方数据由最低层逐渐向高层传递.

  协议数据单元PDU

  SI参考模型中,对等层协议之间交换的信息单元统称为协议数据单元(PDU,Protocol Data Unit)。

  而传输层及以下各层的PDU另外还有各自特定的名称:

  传输层——数据段(Segment)

  网络层——分组(数据包)(Packet)

  数据链路层——数据帧(Frame)

物理层——比特(Bit)

三、 OSI的七层结构

第一层:物理层(PhysicalLayer)
   规定通信设备的机械的、电气的、功能的和过程的特性,用以建立、维护和拆除物理链路连接。具体地讲,机械特性规定了网络连接时所需接插件的规格尺寸、引脚数量和排列情况等;电气特性规定了在物理连接上传输bit流时线路上信号电平的大小、阻抗匹配、传输速率距离限制等;功能特性是指对各个信号先分配确切的信号含义,即定义了DTE和DCE之间各个线路的功能;过程特性定义了利用信号线进行bit流传输的一组操作规程,是指在物理连接的建立、维护、交换信息时,DTE和DCE双方在各电路上的动作系列。

  在这一层,数据的单位称为比特(bit)。

  属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。

  物理层的主要功能: 

   为数据端设备提供传送数据的通路,数据通路可以是一个物理媒体,也可以是多个物理媒体连接而成.一次完整的数据传输,包括激活物理连接,传送数据,终止物理连接.所谓激活,就是不管有多少物理媒体参与,都要在通信的两个数据终端设备间连接起来,形成一条通路.

  传输数据.物理层要形成适合数据传输需要的实体,为数据传送服务.一是要保证数据能在其上正确通过,二是要提供足够的带宽(带宽是指每秒钟内能通过的比特(BIT)数),以减少信道上的拥塞.传输数据的方式能满足点到点,一点到多点,串行或并行,半双工或全双工,同步或异步传输的需要.

  完成物理层的一些管理工作.

物理层的主要设备:中继器、集线器。

  产品代表:

TP-LINK TL-HP8MU 集线器

第二层:数据链路层(DataLinkLayer)
   在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。 

  数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。

  在这一层,数据的单位称为帧(frame)。

  数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。

  链路层的主要功能:

  链路层是为网络层提供数据传送服务的,这种服务要依靠本层具备的功能来实现。链路层应具备如下功能:

  链路连接的建立,拆除,分离。

  帧定界和帧同步。链路层的数据传输单元是帧,协议不同,帧的长短和界面也有差别,但无论如何必须对帧进行定界。

  顺序控制,指对帧的收发顺序的控制。

  差错检测和恢复。还有链路标识,流量控制等等.差错检测多用方阵码校验和循环码校验来检测信道上数据的误码,而帧丢失等用序号检测.各种错误的恢复则常靠反馈重发技术来完成。

数据链路层主要设备:二层交换机、网桥

产品代表:

D-Link DES-1024D

第三层:网络层(Network layer)
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。

  如果你在谈论一个IP地址,那么你是在处理第3层的问题,这是“数据包”问题,而不是第2层的“帧”。IP是第3层问题的一部分,此外还有一些路由协议和地址解析协议(ARP)。有关路由的一切事情都在第3层处理。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。

  在这一层,数据的单位称为数据包(packet)。

  网络层协议的代表包括:IP、IPX、RIP、OSPF等。

  网络层主要功能:

   网络层为建立网络连接和为上层提供服务,应具备以下主要功能:

  路由选择和中继

  激活,终止网络连接

  在一条数据链路上复用多条网络连接,多采取分时复用技术

  差错检测与恢复

  排序,流量控制

  服务选择

  网络管理

  网络层标准简介

网络层主要设备:路由器

产品代表:

TP-LINK TL-R4148

第四层:处理信息的传输层(Transport layer)

   第4层的数据单元也称作数据包(packets)。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段(segments)而UDP协议的数据单元称为“数据报(datagrams)”。这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所谓透明的传输是指在通信过程中传输层对上层屏蔽了通信传输系统的具体细节。

  传输层协议的代表包括:TCP、UDP、SPX等。

  传输层是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用。当网络层服务质量不能满足要求时,它将服务加以提高,以满足高层的要求;当网络层服务质量较好时,它只用很少的工作。传输层还可进行复用,即在一个网络连接上创建多个逻辑连接。 传输层也称为运输层.传输层只存在于端开放系统中,是介于低3层通信子网系统和高3层之间的一层,但是很重要的一层.因为它是源端到目的端对数据传送进行控制从低到高的最后一层.

  有一个既存事实,即世界上各种通信子网在性能上存在着很大差异.例如电话交换网,分组交换网,公用数据交换网,局域网等通信子网都可互连,但它们提供的吞吐量,传输速率,数据延迟通信费用各不相同.对于会话层来说,却要求有一性能恒定的界面.传输层就承担了这一功能.它采用分流/合流,复用/介复用技术来调节上述通信子网的差异,使会话层感受不到.

此外传输层还要具备差错恢复,流量控制等功能,以此对会话层屏蔽通信子网在这些方面的细节与差异.传输层面对的数据对象已不是网络地址和主机地址,而是和会话层的界面端口.上述功能的最终目的是为会话提供可靠的,无误的数据传输.传输层的服务一般要经历传输连接建立阶段,数据传送阶段,传输连接释放阶段3个阶段才算完成一个完整的服务过程.而在数据传送阶段又分为一般数据传送和加速数据传送两种。传输层服务分成5种类型.基本可以满足对传送质量,传送速度,传送费用的各种不同需要.

产品代表:

NETGEAR GS748TS

第五层:会话层(Session layer)

   这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。

  会话层提供的服务可使应用建立和维持会话,并能使会话获得同步。会话层使用校验点可使通信会话在通信失效时从校验点继续恢复通信。这种能力对于传送大的文件极为重要。会话层,表示层,应用层构成开放系统的高3层,面对应用进程提供分布处理,对话管理,信息表示,恢复最后的差错等. 会话层同样要担负应用进程服务要求,而运输层不能完成的那部分工作,给运输层功能差距以弥补.主要的功能是对话管理,数据流同步和重新同步。要完成这些功能,需要由大量的服务单元功能组合,已经制定的功能单元已有几十种.现将会话层主要功能介绍如下.

  为会话实体间建立连接。为给两个对等会话服务用户建立一个会话连接,应该做如下几项工作:

  将会话地址映射为运输地址

  选择需要的运输服务质量参数(QOS)

  对会话参数进行协商

  识别各个会话连接

  传送有限的透明用户数据

  数据传输阶段

  这个阶段是在两个会话用户之间实现有组织的,同步的数据传输.用户数据单元为SSDU,而协议数据单元为SPDU.会话用户之间的数据传送过程是将SSDU转变成SPDU进行的.

  连接释放

  连接释放是通过”有序释放”,”废弃”,”有限量透明用户数据传送”等功能单元来释放会话连接的.会话层标准为了使会话连接建立阶段能进行功能协商,也为了便于其它国际标准参考和引用,定义了12种功能单元.各个系统可根据自身情况和需要,以核心功能服务单元为基础,选配其他功能单元组成合理的会话服务子集.会话层的主要标准有”DIS8236:会话服务定义”和”DIS8237:会话协议规范”.

第六层:表示层(Presentation layer)

   这一层主要解决用户信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责。例如图像格式的显示,就是由位于表示层的协议来支持。

第七层:应用层(Application layer)
   应用层为操作系统或网络应用程序提供访问网络服务的接口。

  应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。

  通过 OSI 层,信息可以从一台计算机的软件应用程序传输到另一台的应用程序上。例如,计算机 A 上的应用程序要将信息发送到计算机 B 的应用程序,则计算机 A 中的应用程序需要将信息先发送到其应用层(第七层),然后此层将信息发送到表示层(第六层),表示层将数据转送到会话层(第五层),如此继续,直至物理层(第一层)。在物理层,数据被放置在物理网络媒介中并被发送至计算机 B 。计算机 B 的物理层接收来自物理媒介的数据,然后将信息向上发送至数据链路层(第二层),数据链路层再转送给网络层,依次继续直到信息到达计算机 B 的应用层。最后,计算机 B 的应用层再将信息传送给应用程序接收端,从而完成通信过程。下面图示说明了这一过程。

  OSI 的七层运用各种各样的控制信息来和其他计算机系统的对应层进行通信。这些控制信息包含特殊的请求和说明,它们在对应的 OSI 层间进行交换。每一层数据的头和尾是两个携带控制信息的基本形式。

  对于从上一层传送下来的数据,附加在前面的控制信息称为头,附加在后面的控制信息称为尾。然而,在对来自上一层数据增加协议头和协议尾,对一个 OSI 层来说并不是必需的。

  当数据在各层间传送时,每一层都可以在数据上增加头和尾,而这些数据已经包含了上一层增加的头和尾。协议头包含了有关层与层间的通信信息。头、尾以及数据是相关联的概念,它们取决于分析信息单元的协议层。例如,传输层头包含了只有传输层可以看到的信息,传输层下面的其他层只将此头作为数据的一部分传递。对于网络层,一个信息单元由第三层的头和数据组成。对于数据链路层,经网络层向下传递的所有信息即第三层头和数据都被看作是数据。换句话说,在给定的某一 OSI 层,信息单元的数据部分包含来自于所有上层的头和尾以及数据,这称之为封装。

  例如,如果计算机 A 要将应用程序中的某数据发送至计算机 B ,数据首先传送至应用层。 计算机 A 的应用层通过在数据上添加协议头来和计算机 B 的应用层通信。所形成的信息单元包含协议头、数据、可能还有协议尾,被发送至表示层,表示层再添加为计算机 B 的表示层所理解的控制信息的协议头。信息单元的大小随着每一层协议头和协议尾的添加而增加,这些协议头和协议尾包含了计算机 B 的对应层要使用的控制信息。在物理层,整个信息单元通过网络介质传输。

  计算机 B 中的物理层收到信息单元并将其传送至数据链路层;然后 B 中的数据链路层读取计算机 A 的数据链路层添加的协议头中的控制信息;然后去除协议头和协议尾,剩余部分被传送至网络层。每一层执行相同的动作:从对应层读取协议头和协议尾,并去除,再将剩余信息发送至上一层。应用层执行完这些动作后,数据就被传送至计算机 B 中的应用程序,这些数据和计算机 A 的应用程序所发送的完全相同 。

  一个 OSI 层与另一层之间的通信是利用第二层提供的服务完成的。相邻层提供的服务帮助一 OSI 层与另一计算机系统的对应层进行通信。一个 OSI 模型的特定层通常是与另外三个 OSI 层联系:与之直接相邻的上一层和下一层,还有目标联网计算机系统的对应层。例如,计算机 A 的数据链路层应与其网络层,物理层以及计算机 B 的数据链路层进行通信。

四、 OSI分层的优点

1)人们可以很容易的讨论和学习协议的规范细节。

  (2)层间的标准接口方便了工程模块化。

  (3)创建了一个更好的互连环境。

  (4)降低了复杂度,使程序更容易修改,产品开发的速度更快。

  (5)每层利用紧邻的下层服务,更容易记住个层的功能。

  OSI是一个定义良好的协议规范集,并有许多可选部分完成类似的任务。

  它定义了开放系统的层次结构、层次之间的相互关系以及各层所包括的可能的任务。是作为一个框架来协调和组织各层所提供的服务。

  OSI参考模型并没有提供一个可以实现的方法,而是描述了一些概念,用来协调进程间通信标准的制定。即OSI参考模型并不是一个标准,而是一个在制定标准时所使用的概念性框架。

五、 OSI模型与TCP/IP模型的比较
TCP/IP模型实际上是OSI模型的一个浓缩版本,它只有四个层次:

  1.应用层

  2.运输层

  3.网际层

  4.网络接口层

  与OSI功能相比:

  应用层对应着OSI的 应用层 表示层 会话层

  运输层对应着OSI的传输层

  网际层对应着OSI的网络层

网络接口层对应着OSI的数据链路层和物理层

网络编程中的几个概念

  • 客户端(client):移动应用(iOS,android等应用)
  • 服务器(server):为客户端提供服务,提供数据,提供资源的机器
  • 请求(request):客户端向服务器索取数据的一种行为
  • 响应(response):服务器对客户端的请求做出的反应,一般指返回数据给客户端

    在网络开发中主要有如下几种方式

  • GET请求:get是获取数据的意思,数据以明文在URL中传递,受限于URL长度,多以传输的数据数据量比较小.

  • POST请求:post是向服务器提交数据的意思,提交的数据以实际内容形式存放到请求头中进行传递,无法再浏览器URL中查看到,大小没有限制.
  • HEAD请求:请求头信息,并不返回请求数据,而只返回请求头信息,常用于在文件下载中去的文件大小,类型等信息.

GET请求和POST请求的区别

  1. GET请求的接口会包含参数部分,参数会作为网址的一部分,服务器地址与参数之间通过?间隔.POST请求会将服务器地址与参数分开,请求接口中只有服务器地址,而地址会作为请求的一部分,提交后台服务器.

  2. GET请求参数会出现在接口中,不安全,而POST请求相对安全.

    1. 虽然GET请求和POST请求都可以用来请求和提交数据,但是一般的GET多用于从后台请求数据,POST多用于向后台提交数据.

使用NSURLSession发送请求

发送GET请求

  1. 确定请求路径(一般有公司的后台开发人员以接口文档的方式提供),GET请求参数直接跟在URL后面
  2. 创建请求对象(默认包含了请求头和请求方法[GET]),这步可以省略
  3. 创建会话对象(NSURLSession)
  4. 根据绘画对象创建请求任务(NSURLSessionDataTask)
  5. 执行Task
  6. 当得到服务器返回的响应后,解析数据
-(void)get1
{
    //对请求路径的说明
    //http://120.25.226.186:32812/login?username=520it&pwd=520&type=JSON
    //协议头+主机地址+接口名称+?+参数1&参数2&参数3
    //协议头(http://)+主机地址(120.25.226.186:32812)+接口名称(login)+?+参数1(username=520it)&参数2(pwd=520)&参数3(type=JSON)
    //GET请求,直接把请求参数跟在URL的后面以?隔开,多个参数之间以&符号拼接

    //1.确定请求路径
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];

    //2.创建请求对象
    //请求对象内部默认已经包含了请求头和请求方法(GET)
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    //3.获得会话对象
    NSURLSession *session = [NSURLSession sharedSession];

    //4.根据会话对象创建一个Task(发送请求)
    /*
     第一个参数:请求对象
     第二个参数:completionHandler回调(请求完成【成功|失败】的回调)
               data:响应体信息(期望的数据)
               response:响应头信息,主要是对服务器端的描述
               error:错误信息,如果请求失败,则error有值
     */
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

        if (error == nil) {
            //6.解析服务器返回的数据
            //说明:(此处返回的数据是JSON格式的,因此使用NSJSONSerialization进行反序列化处理)
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

            NSLog(@"%@",dict);
        }
    }];

    //5.执行任务
    [dataTask resume];
}

发送GET请求的第一种方法
-(void)get2
{
    //1.确定请求路径
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];

    //2.获得会话对象
    NSURLSession *session = [NSURLSession sharedSession];

    //3.根据会话对象创建一个Task(发送请求)
    /*
     第一个参数:请求路径
     第二个参数:completionHandler回调(请求完成【成功|失败】的回调)
               data:响应体信息(期望的数据)
               response:响应头信息,主要是对服务器端的描述
               error:错误信息,如果请求失败,则error有值
     注意:
        1)该方法内部会自动将请求路径包装成一个请求对象,该请求对象默认包含了请求头信息和请求方法(GET)
        2)如果要发送的是POST请求,则不能使用该方法
     */
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

        //5.解析数据
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        NSLog(@"%@",dict);

    }];

    //4.执行任务
    [dataTask resume];
}

发送GET请求的第二种方法

发送POST请求

  1. 确定请求路径(一般有公司的后台开发人员以接口文档的方式提供)
  2. 创建可变的请求对象(设置请求对象属性)
  3. 修改请求方法为POST
  4. 设置请求体,把参数转换为二进制数据并设置请求提
  5. 创建会话对象(NSURLSession)
  6. 根据会话对象创建请求任务(NSRULSessionDataTask)
  7. 执行Task
  8. 当得到服务器返回的响应后,解析数据
-(void)post
{
    //对请求路径的说明
    //http://120.25.226.186:32812/login
    //协议头+主机地址+接口名称
    //协议头(http://)+主机地址(120.25.226.186:32812)+接口名称(login)
    //POST请求需要修改请求方法为POST,并把参数转换为二进制数据设置为请求体

    //1.创建会话对象
    NSURLSession *session = [NSURLSession sharedSession];

    //2.根据会话对象创建task
    NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login"];

    //3.创建可变的请求对象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    //4.修改请求方法为POST
    request.HTTPMethod = @"POST";

    //5.设置请求体
    request.HTTPBody = [@"username=520it&pwd=520it&type=JSON" dataUsingEncoding:NSUTF8StringEncoding];

    //6.根据会话对象创建一个Task(发送请求)
    /*
     第一个参数:请求对象
     第二个参数:completionHandler回调(请求完成【成功|失败】的回调)
                data:响应体信息(期望的数据)
                response:响应头信息,主要是对服务器端的描述
                error:错误信息,如果请求失败,则error有值
     */
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

        //8.解析数据
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
        NSLog(@"%@",dict);

    }];

    //7.执行任务
    [dataTask resume];
}

你可能感兴趣的:(笔记,ios,网络编程,ios开发,网络,网络服务器)