网络REQUEST

简介: 网络REQUEST

一、iOS9 网络编程的重大改变:

1、网络请求方式的改变

1)NSURLConnection: iOS9之前使用
  2)NSURLSession: iOS9 使用这个类

2、后台服务器传输协议由HTTP改成HTTPS(使用网络服务器请求一定要配置,下面是配置方法)

1)iOS开发 -> info.plist ->右键AddRow->(输入APP)选择 App Transport Security Settings ->Allow Arbitrary Loads -> YES

二、URL(包括:模式(或称协议)、服务器名称(或IP地址:数字不好记)、 路径和文件名)

1、概念:
  Uniform Resource Locator 统一资源定位符
2、结构
  1、URL包含模式(或称协议)、服务器名称(或IP地址:数字不好记)、 路径和文件名
     https ://  www.baidu.com(172.0.0.1域名都是服务器名称)   /img/bd_logo1.png
     可以通过URL找到 服务器中的文件
     URL中如果包含中文:(将中文转化)
     将中文转化的好处是:NSLog(@"%@",[url host]);//获取到服务器名字
                       NSLog(@"%@",[url path]);  获取到路径
     NSString *s = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

三、HTTP:(超文本传输协议)

1、全称
  Hypertext Transfer Protocol 超文本传输协议
  https——用安全套接字层 传送的超文本传输协议//更加安全
2、概念:
  超文本传输协议是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种 发布和接收 HTML 页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基
  是用于从WWW服务器传输超文本到本地浏览器的传输协议
3、通讯流程(是用于从WWW服务器传输超文本到本地浏览器的传输协议)
   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 
   3) 问一下后台是否有错

四、iOS下的HTTP请求过程

1、准备request
     1)概念
       iOS下使用NSURLRequest或者NSMutableURLRequest对象作为request,后者可以添加请求头
       请求中需要两个基本元素
          (1)要加载的URL (如果URL里面有中文需要转化)
          (2)加载的方式(默认是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];

五、JSON和XML(建议使用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"]

六.具体的一个完整的代码

pragma mark  网络请求

/*
 * HTTP:是一种超文本传输协议
 * 通讯流程:
 1、发送请求到服务器
 2、服务器根据请求的内容做相应的响应
 *
 */
/*
 * 请求中必须要用的内容
 1、url http://apis.baidu.com/apistore/weatherservice/citylist?cityname
 2、请求方式(get和post) GET
 * 可有可无的
 1、请求头  apikey
 2、请求体
 */
//准备一个url并且给上一个请求参数
NSURL *urlString = [NSURL URLWithString:@"http://apis.baidu.com/apistore/weatherservice/weather?citypinyin=zhengzhou"];
 //创建出来一个可变的请求对象
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlString];
//建一个请求方式
request.HTTPMethod = @"GET";
//设置请求超时
//request.timeoutInterval = 5;
 //*****上面两步是必须做的****/
//设置请求头,前面是请求头的参数,后面是参数名
[request addValue:@"076cbce61ccaa7b7d304c23f24e54790" forHTTPHeaderField:@"apikey"];
pragma mark 发送请求

//获取到NSURLSession的单利对象
NSURLSession *session = [NSURLSession sharedSession];
 NSURLSessionDataTask *sessionDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    //数据请求成功调用
     NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];//NSJSONReadingMutableContainers返回的数组或者字典是可变的//NSJSONReadingMutableLeaves返回的字符串是可变的// NSJSONReadingAllowFragments既不是数组也不是字符串
     NSLog(@"%@",dictionary);
     //获取到响应头信息(上传下载的时候用)
     NSHTTPURLResponse *httpresponse = (NSHTTPURLResponse *)response;
     NSDictionary *responseDict = httpresponse.allHeaderFields;
     NSLog(@"%@",responseDict);
}];
//真正开始请求

[sessionDataTask resume];

七:网络环境判断(需要框架)

Reachability
(1)导入类名
(2)创建对象 hostName尽量用一个稳定的网络
(3)添加观察者  接收网络环境发生改变的通知 通知的名字 kReachabilityChangedNotification
(4)开始检测
(5)在通知中得到 Reachability对象 not.object 获得网络环境的状态


目录
相关文章
|
5月前
|
小程序 开发者
微信小程序之网络数据请求 wx:request的简单使用
这篇文章介绍了微信小程序中如何使用wx.request进行网络数据请求,包括请求的配置、请求的格式以及如何在开发阶段关闭请求的合法检验。
微信小程序之网络数据请求 wx:request的简单使用
|
小程序 API
【愚公系列】2022年02月 微信小程序-Request网络请求的封装
【愚公系列】2022年02月 微信小程序-Request网络请求的封装
169 0
【愚公系列】2022年02月 微信小程序-Request网络请求的封装
|
Python
wxpython-通过request远程下载网络zip文件,并解压安装文件
1.通过wxpython,产生一个窗体,窗体上有一段[文字标签],一个[进度条],一个[开始按钮]。 2.点击【开始按钮】,下载网络资源文件http://example.cn/test.zip。进度条和文字标签同时显示百分比 3.下载完成后,解压到指定目录。如果指定目录下有文件,则覆盖掉。
450 0
wxpython-通过request远程下载网络zip文件,并解压安装文件
|
2月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
90 17
|
2月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
2月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
64 10
|
2月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
76 10
|
2月前
|
存储 监控 安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的融合与挑战
本文将探讨云计算与网络安全之间的关系,以及它们在云服务、网络安全和信息安全等技术领域中的融合与挑战。我们将分析云计算的优势和风险,以及如何通过网络安全措施来保护数据和应用程序。我们还将讨论如何确保云服务的可用性和可靠性,以及如何处理网络攻击和数据泄露等问题。最后,我们将提供一些关于如何在云计算环境中实现网络安全的建议和最佳实践。
|
2月前
|
监控 安全 网络安全
网络安全与信息安全:漏洞、加密与意识的交织
在数字时代的浪潮中,网络安全与信息安全成为维护数据完整性、保密性和可用性的关键。本文深入探讨了网络安全中的漏洞概念、加密技术的应用以及提升安全意识的重要性。通过实际案例分析,揭示了网络攻击的常见模式和防御策略,强调了教育和技术并重的安全理念。旨在为读者提供一套全面的网络安全知识框架,从而在日益复杂的网络环境中保护个人和组织的资产安全。
|
2月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们日常生活中不可或缺的一部分。本文将深入探讨网络安全漏洞、加密技术和安全意识等方面的问题,并提供一些实用的建议和解决方案。我们将通过分析网络攻击的常见形式,揭示网络安全的脆弱性,并介绍如何利用加密技术来保护数据。此外,我们还将强调提高个人和企业的安全意识的重要性,以应对日益复杂的网络威胁。无论你是普通用户还是IT专业人士,这篇文章都将为你提供有价值的见解和指导。

热门文章

最新文章