星空网 > 软件开发 > 操作系统

iOSDay39网络之数据请求

1. HTTP和HTTPS协议

 1> URL

  URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源

  URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL

  URL的基本格式=协议://主机地址/路径

   http://www.cnblogs.com/gfxxbk/

   协议:不同的协议,代表着不同的资源查找方式,资源传输方式

   主机地址:存放资源的主机的IP地址(域名)  

   路径:资源在主机中的位置

 2> HTTP协议的概念

  HTTP协议,Hyper Text Transfer Protocol(超文本传输协议)是用于从万维网(WWW)服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。

 3> HTTP的工作原理

  HTTP 协议采用请求/响应模型。客户端向服务器发送一个请求报文,服务器以一个状态作为响应。

 4> C/S模式

  Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序

 iOSDay39网络之数据请求images/loading.gif' data-original="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAn8AAAFLCAYAAACnTerdAAAAAXNSR0IArs4c6QAAAdVpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpDb21wcmVzc2lvbj4xPC90aWZmOkNvbXByZXNzaW9uPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cjl0tmoAAEAASURBVHgB7J0HfBzF3f4fnbpky3Iv2Ma9NzA2uFONDRhjDKaGhBIILXkDIXnfJG/KS/JPffMmgRBCMRBa6B0bgwEbN2rAvdu49yarl/v/frOau73TnXSSTrJO+6w+q92dnZmd+c7sznNTk/yygRsJkAAJkAAJkAAJkIAnCPg8EUtGkgRIgARIgARIgARIwBCg+GNGIAESIAESIAESIAEPEaD481BiM6okQAIkQAIkQAIkQPHHPEACJEACJEACJEACHiJA8eehxGZUSYAESIAESIAESIDij3mABEiABEiABEiABDxEgOLPQ4nNqJIACZAACZAACZAAxR/zAAmQAAmQAAmQAAl4iADFn4cSm1ElARIgARIgARIgAYo/5gESIAESIAESIAES8BABij8PJTajSgIkQAIkQAIkQAIUf8wDJEACJEACJEACJOAhAhR/HkpsRpUESIAESIAESIAEKP6YB0iABEiABEiABEjAQwQo/jyU2IwqCZAACZAACZAACVD8MQ+QAAmQAAmQAAmQgIcIUPx5KLEZVRIgARIgARIgARKg+GMeIAESIAESIAESIAEPEaD481BiM6okQAIkQAIkQAIkQPHHPEACJEACJEACJEACHiJA8eehxGZUSYAESIAESIAESIDij3mABEiABEiABEiABDxEgOLPQ4nNqJIACZAACZAACZAAxR/zAAmQAAmQAAmQAAl4iADFn4cSm1ElARIgARIgARIgAYo/5gESIAESIAESIAES8BABij8PJTajSgIkQAIkQAIkQAIUf8wDJEACJEACJEACJOAhAhR/HkpsRpUESIAESIAESIAEKP6YB0iABEiABEiABEjAQwQo/jyU2IwqCZAACZAACZAACVD8MQ+QAAmQAAmQAAmQgIcIUPx5KLEZVRIgARIgARIgARKg+GMeIAESIAESIAESIAEPEaD481BiM6okQAIkQAIkQAIkQPHHPEACJEACJEACJEACHiJA8eehxGZUSYAESIAESIAESIDij3mABEiABEiABEiABDxEgOLPQ4nNqJIACZAACZAACZAAxR/zAAmQAAmQAAmQAAl4iADFn4cSm1ElARIgARIgARIgAYo/5gESIAESIAESIAES8BABij8PJTajSgIkQAIkQAIkQAIUf8wDJEACJEACJEACJOAhAhR/HkpsRpUESIAESIAESIAEKP6YB0iABEiABEiABEjAQwQo/jyU2IwqCZAACZAACZAACVD8MQ+QAAmQAAmQAAmQgIcIUPx5KLEZVRIgARIgARIgARKg+GMeIAESIAESIAESIAEPEaD481BiM6okQAIkQAIkQAIkQPHHPEACJEACJEACJEACHiJA8eehxGZUSYAESIAESIAESIDij3mABEiABEiABEiABDxEgOLPQ4nNqJIACZAACZAACZAAxR/zAAmQAAmQAAmQAAl4iADFn4cSm1ElARIgARIgARIgAYo/5gESIAESIAESIAES8BABij8PJTajSgIkQAIkQAIkQAIUf8wDJEACJEACJEACJOAhAhR/HkpsRpUESIAESIAESIAEKP6YB0iABEiABEiABEjAQwQo/jyU2IwqCZAACZAACZAACVD8MQ+QAAmQAAmQAAmQgIcIUPx5KLEZVRIgARIgARIgARKg+GMeIAESIAESIAESIAEPEaD481BiM6okQAIkQAIkQAIk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" width="533" height="276" />

 5> HTTPS

  HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。 它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。 HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接收方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。

 6> SSL

  SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,

 7> HTTP和HTTPS的异同

  • https协议需要到ca申请证书,一般免费证书很少,需要交费。

  • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议

  • http和https使用的是完全不同的链接方式,用的端口也不一样,前者是80,后者是443.

  • http的链接很简单,是无状态的.

  • https是协议是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议要比http安全

iOSDay39网络之数据请求

GET

  • POST

  •  2> 两种请求方式的比较

    • 给服务器传输数据的方式不同

      GET:通过网址字符串

      POST:通过data

    • 传输数据的大小    

      GET:网址字符串最多255字节

      POST:使用NSData,容量超过1G

    • 安全性

      GET:所有传输给服务的数据,显示在网址里,类似于密码的明文输入,直接可见

      POST:数据被转成NSData(二进制数据),类似于密码的密文输入,无法直接读取

    3. iOS实现网络编程(iOS7之前的版本,现在已经弃用,但是仍然可以使用)

     1> HTTP协议请求如何实现

      网络请求地址对象NSURL的作用及用法

      网络请求对象NSURLRequest,NSMutableURLRequest的作用及用法

      网络链接对象NSURLConnection的作用及用法

      网络链接协议NSURLConnectionDelegate的作用及用法

     2> NSURL

      url:统一资源定位符,也被称为网址,因特网上标准的资源网址

      一个典型的url:http://lily:123456@www.google.com/search?hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page

      url的符语法: 协议://授权/路径?查询  

      协议: ftp://(文件传输协议)  http://(超文本传输协议)      
           https://(安全超文本传输协议) file://(本地文件协议)

     3> 连接方式

    • 同步连接:程序容易出现卡死现象

    • 异步连接:等待数据返回

      异步连接有两种实现方式:

       ① 设置代理,接收数据

       ② 实现block

     4> 打开Xcode网络适配

      使用http请求 :NSAppTransportSecurity 字典 ,NSAllowsArbitraryLoads YES
      代码:

    1 <key>NSAppTransportSecurity</key>2   <dict>3     <key>NSAllowsArbitraryLoads</key>4       <true/>5   </dict>

      图表:

      iOSDay39网络之数据请求

      ② POST同步

     1 #pragma mark - 同步的post请求 2 - (IBAction)postSynchronousRequest:(UIButton *)sender 3 { 4   // 1. 创建URL 5   NSURL *url = [NSURL URLWithString:POST_URL]; 6    7   // 2. 设置网络请求[post请求必须初始化为可变请求,因为稍后要进行一些内容设置] 8   NSMutableURLRequest *mutableRequest = [NSMutableURLRequest requestWithURL:url]; 9   10   // 2.5 设置body11   // 创建一个连接字符串(这个内容在以后的开发中接口文档都有标注)12   NSString *dataString = POST_BODY;13   // 对接口字符串进行编码(这一步千万不能忘记)14   NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];15   // 设置请求格式为POST请求[这个地方在后面POST必须大写]16   [mutableRequest setHTTPMethod:@"POST"];17   // 设置请求体(body)18   [mutableRequest setHTTPBody:postData];19   20   // 3. 连接服务器21   NSData *data = [NSURLConnection sendSynchronousRequest:mutableRequest returningResponse:nil error:nil];22   23   // 4. 进行JSON数据解析24   NSDictionary *resultDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];25   26   NSLog(@"%@", resultDict);27 }

      注意:post方法和get方法最大的区别就是在于post方法设置请求体(body)

      注意:若网址字符串URLString中若有类对象,可以使用此方法处理:[URLString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

     7> 异步代理

    iOSDay39网络之数据请求

      代码(代码为get请求,post请求同理,只要动态实现请求体):

     1 - (IBAction)getAsynchronousRequest:(UIButton *)sender 2 { 3   // 1. 创建URL 4   NSURL *url = [NSURL URLWithString:GET_URL]; 5    6   // 2. 创建请求 7   NSURLRequest *request = [NSURLRequest requestWithURL:url]; 8  9   // 方法一:使用delegate实现10   [NSURLConnection connectionWithRequest:request delegate:self];11 }12 13 #pragma mark - NSURLConnectionDataDelegate相关的代理方法14 // 服务器开始响应15 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response16 {17   self.resultData = [NSMutableData data];18 }19 20 // 开始接受数据21 // 这个方**重复执行,得到的每段数据拼接在一起就可以了22 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data23 {24   [self.resultData appendData:data];25 }26 27 // 结束服务器28 - (void)connectionDidFinishLoading:(NSURLConnection *)connection29 {30   // 进行数据解析31   NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];32   33   NSLog(@"%@", dict);34 }

     8>异步Block

      iOSDay39网络之数据请求

      代码(代码为get请求,post请求同理,只要动态实现请求体):

    #pragma mark - 异步的get请求- (IBAction)getAsynchronousRequest:(UIButton *)sender{  // 1. 创建URL  NSURL *url = [NSURL URLWithString:GET_URL];    // 2. 创建请求  NSURLRequest *request = [NSURLRequest requestWithURL:url];    // 3. 连接服务器  // 方法一:Block方法实现  // 参数1:请求对象  // 参数2:线程队列 [NSOperationQueue mainQueue] 主队列    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {        // response是携带的接口信息    // data 请求下来的数据,接下来会使用到    // connectionError 错误信息    if (connectionError == nil) {      // 4. 解析      NSDictionary *resultDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];            NSLog(@"dict = %@", resultDict);            // 先开辟子线程解析数据,然后在主线程刷新UI    }  }];}

    4. iOS7之后请求变化

     1> NSURLSession

      在WWDC 2013中,Apple的团队对NSURLConnection进行了重构,并推出了NSURLSession作为替代。
        • 支持后台运行的网络任务

      • 暂停、停止、重启网络任务,不再需要 NSOpation 封装

      • 请求可以使用同样的配置容器

        • 不同的 session 可以使用不同的私有存储,block和代理可以同时起作用    •    直接从文件系统上传、下载

        • 为了方便程序员使用,苹果提供了一个全局 session

        • 所有的 任务(Task) 都是由 Session 发起的

        • 所有的任务默认是挂起的,需要 Resume

     2> 三种工作模式:

       + (NSURLSessionConfiguration *)defaultSessionConfiguration; 默认会话模式

         + (NSURLSessionConfiguration *)ephemeralSessionConfiguration; 瞬时会话模式

         + (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier; 后台会话模式

     3> NSURLSession支持的三种任务

       对数据加载:使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别

         处理下载任务使用:NSURLSessionDownloadTask

         要处理上传任务使用:NSURLSessionUploadTask

     4> Block方法

      ① GET请求

     1 #pragma mark GET的block方法 2 - (void)bolckMethod 3 { 4   // 方法1:使用Block 5    6   // 1. 创建URL 7   NSURL *url = [NSURL URLWithString:GET_URL]; 8    9   // 2. 创建session对象(iOS9之后推出)10   NSURLSession *session = [NSURLSession sharedSession];11   12   // 3. 创建task请求任务13   // NSURLSession是基于任务去完成相关的事件的14   // 参数1. 请求的URL15   // NSURLSessionTask 所有的任务都放在这个里实现16   // 对数据加载:使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别17   // 处理下载任务使用:NSURLSessionDownloadTask18   // 要处理上传任务使用:NSURLSessionUploadTask19   NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {20     // 4. 解析数据21     if (error == nil) {22       NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];23       NSLog(@"%@=get-block", dict);24     }25   }];26   27   // 5. 核心:启动任务【千万不能忘记】28   // 原因:NSURLSessionTask实例出来的任务处于挂起状态,如果不启动,不会走Block里面的相关内容29   [task resume];30 }

     

      ② POST请求

     1 - (IBAction)postRequest:(UIButton *)sender 2 { 3   // Block方法 4    5   NSURL *url = [NSURL URLWithString:POST_URL]; 6    7   NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:url]; 8    9   NSString *dataString = POST_BODY;10   11   NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];12   13   [mRequest setHTTPMethod:@"POST"];14   15   [mRequest setHTTPBody:postData];16   17   NSURLSession *sessin = [NSURLSession sharedSession];18   19   NSURLSessionTask *task = [sessin dataTaskWithRequest:mRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {20     21     if (error == nil) {22       NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];23       NSLog(@"%@=post-block", dict);24     }25   }];26   27   [task resume];28 }

     

     5> delegate方法

      iOSDay39网络之数据请求

     6> NSURLSession数据任务

      适合于小的数据访问,例如:JSON,




    原标题:iOSDay39网络之数据请求

    关键词:IOS

    IOS
    *特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

    lazada诈骗:https://www.goluckyvip.com/tag/85889.html
    厨具炊具市场:https://www.goluckyvip.com/tag/8589.html
    lazada学习:https://www.goluckyvip.com/tag/85893.html
    lazada供应链:https://www.goluckyvip.com/tag/85894.html
    lazada销售品类:https://www.goluckyvip.com/tag/85895.html
    lazada营销方式:https://www.goluckyvip.com/tag/85896.html
    E-Bike品牌EMotorad获战略融资!:https://www.kjdsnews.com/a/1840707.html
    Shopee订单量激增5倍多,越南成韩国美容品牌主要消费市场:https://www.kjdsnews.com/a/1840708.html
    相关文章
    我的浏览记录
    最新相关资讯
    海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流