网络请求相关

1、网络请求方式的改变

  1)NSURLConnection: iOS9之前使用

  2)NSURLSession: iOS9 使用这个类

2、后台服务器传输协议由HTTP改成HTTPS

  1)iOS开发 -> info.plist -> App Transport Security Settings ->Allow Arbitrary Loads -> YES

I
二、URL:

1、概念:
  
  Uniform Resource Locator 统一资源定位符

2、结构

  1、URL包含模式(或称协议)、服务器名称(或IP地址)、 路径和文件名

     https ://  www.baidu.com   /img/bd_logo1.png

     可以通过URL找到 服务器中的文件

     URL中如果包含中文:

     NSString *s = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

练习:通过连接加载图片

三、HTTP:

1、全称

  Hypertext Transfer Protocol 超文本传输协议
  https——用安全套接字层 传送的超文本传输协议

2、概念:

  超文本传输协议是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种 发布和接收 HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基

  是用于从WWW服务器传输超文本到本地浏览器的传输协议

3、通讯流程

   1)首先客户端发送一个请求(request)给服务器

       request由两部分组成:

         请求头
         请求体

   2)服务器在接收到这个请求后将生成一个响应(response)返回给客户端

       response由两部分组成:

         相应头
         相应体

4、常用请求方法

   1) get 一般上请求数据时使用,直接将参数暴漏到url中,参数的长度有限制
   2) post 一般上传数据时使用,将敏感的参数放到请求体中,在url中看不到,POST传递的数据量没有限制(具体还得看服务器的处理能力)

   PS:get post的选择

   1)如果要传递大量数据 比如文件上传 只能用POST请求
   2)GET的安全性比POST要差些 如果包含机密\敏感信息 建议用POST
   3)如果仅仅是索取数据(数据查询) 建议使用GET
   4)如果是增加、修改、删除数据 建议使用POST 

 

5、发送了一个请求 没有任何回应

   1)没联网
   2)请求内容错误:URL 

练习:通过浏览器了解HTTP请求过程

四、JSON和XML

1、基本概念

   查看博客 http://www.jianshu.com/p/5df890302416

2、JSON解析

   
   [NSJSONSerialization JSONObjectWithData:nil options:NSJSONReadingMutableContainers error:nil];
     
     NSJSONReadingMutableContainers:返回可变容器,NSMutableDictionary或NSMutableArray。 

     NSJSONReadingMutableLeaves:返回的JSON对象中字符串的值为NSMutableString,

     NSJSONReadingAllowFragments:允许JSON字符串最外层既不是NSArray也不是NSDictionary,但必须是有效的JSON Fragment。例如使用这个选项可以解析 @“123” 这样的字符串
   

3、XML解析

   1)准备工作

      将GDataXMLNode文件加入至工程中

      向Frameworks文件中添加libxml2.dylib库

      在Croups & Files 侧边栏中双击工程图标,找到 build setting修改两个属性:

         Search Paths中 找到Header Search Paths  将其对应的值修改为:/usr/include/libxml2,
         在Linking中找到 Other Linker Flags 对应的值改为:-lxml2。

   2) 读取xml文件

     GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:data error:nil];

   3)获取到根节点

     GDataXMLElement *rootElement = [document rootElement];

   4)取出节点的属性值

     [element attributeForName:@"id"]

   4)根据节点取值

     [rootElement elementsForName:@"from"]

练习:自己写JSON和XML串并解析

五、iOS下的HTTP请求过程

 1、准备request

     1)概念

       iOS下使用NSURLRequest或者NSMutableURLRequest对象作为request,后者可以添加请求头

       在请求中需要两个基本元素:

         要加载的URL 
         加载的方式(默认是get)

       如果需要,可以采用如下方式添加请求头、请求体

         [request addValue:nil forHTTPHeaderField:nil]; //可变请求对象,才设置请求头

         request.HTTPBody //请求体

     2)request的缓存策略问题
  
         不考虑缓存策略

           + (instancetype)requestWithURL:(NSURL *)URL;
           - (instancetype)initWithURL:(NSURL *)URL

         考虑缓存策略 超时限制

           + (instancetype)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval
           - (instancetype)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval

         缓存策略的不同

           默认的缓存策略 如果缓存不存在 直接从服务端获取 如果缓存存在 会根据response中的Cache-Control字段判断下一步操作
     
              NSURLRequestUseProtocolCachePolicy,

           忽略缓存 重新请求

              NSURLRequestReloadIgnoringCacheData 

           有缓存就使用 不管其有效性 没有缓存就重新请求

              NSURLRequestReturnCacheDataElseLoad 

           有缓存就用缓存 没有缓存就不发请求 当做请求出错处理(用于离线模式)

              NSURLRequestReturnCacheDataDontLoad 
  
     3)缓存策略的选择,如果请求某个URL的返回数据

         经常更新:不能用缓存 比如股票、彩票数据

         一成不变:果断用缓存

         偶尔更新:可以定期更改缓存策略 或者 清除缓存

         提示:如果大量使用缓存 会越积越大 建议定期清除缓存

 2、使用NSURLSession发送请求

     1)创建一个NSURLSession对象,来帮助发送request请求

       //数据请求,返回的是一个NSURLSessionDataTask对象,专门用来做数据类的网络请求任务
       
       [session dataTaskWithRequest:nil completionHandler:nil];

       //上传请求,返回的是一个NSURLSessionUploadTask对象,专门用来做上传类的网络请求任务

       [session uploadTaskWithRequest:nil fromData:nil completionHandler:nil];

       //下载请求,返回的是一个NSURLSessionDownloadTask对象,专门用来做下载类的网络请求任务

       [session downloadTaskWithRequest:nil completionHandler:nil];

     2)开始请求

         [sessionTask resume];

 3、获取响应头和相应体信息

      //获取到相应头
      NSHTTPURLResponse *httpResopnse = (NSHTTPURLResponse *)response;
    
      //获取响应体
      NSMutableDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];

六:网络环境判断

Reachability

(1)导入类名
(2)创建对象 hostName尽量用一个稳定的网络
(3)添加观察者  接收网络环境发生改变的通知 通知的名字 kReachabilityChangedNotification
(4)开始检测
(5)在通知中得到 Reachability对象 not.object 获得网络环境的状态
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,613评论 4 59
  • get 和post 的主要区别体现在数据传递上,get:在请求的URL后面以?的形式跟上发给服务器的参数,多个参数...
    tiGress阅读 338评论 0 2
  • 今天妈妈给老家的表姐打了个电话,勾起了我的乡思。最近在看心理学小说,自卑与超越,了解到了童年对人的一生的重大影响。...
    天空中的鱼阅读 567评论 0 2
  • 夏宛之一边喝着咖啡,一边写着小说,半夜外面突然下起了雨,她瞟了一眼电脑右下角的时间,凌晨两点,这个时间这个城市的人...
    长空下是道安静的蓝阅读 171评论 0 2