iOS 开发之网络——总结

来源:互联网 发布:淘宝上的祛湿茶哪个好 编辑:程序博客网 时间:2024/05/21 19:30

[objc] view plain copy 在CODE上查看代码片派生到我的代码片
  1. 一、一个HTTP请求的基本要素  
  2. 1.请求URL:客户端通过哪个路径找到服务器  
  3.   
  4. 2.请求参数:客户端发送给服务器的数据  
  5. * 比如登录时需要发送的用户名和密码  
  6.   
  7. 3.返回结果:服务器返回给客户端的数据  
  8. * 一般是JSON数据或者XML数据  
  9.   
  10. 二、基本的HTTP请求的步骤(移动客户端)  
  11. 1.拼接"请求URL" + "?" + "请求参数"  
  12. * 请求参数的格式:参数名=参数值  
  13. * 多个请求参数之间用&隔开:参数名1=参数值1&参数名2=参数值2  
  14. * 比如:http://www.baidu.com?username=123&pwd=456  
  15.   
  16. 2.发送请求  
  17.   
  18. 3.解析服务器返回的数据  
  19.   
  20. 三、JSON解析  
  21. 1.利用NSJSONSerialization类解析  
  22. * JSON数据(NSData) --> Foundation-OC对象(NSDictionary、NSArray、NSString、NSNumber)  
  23. + (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;  
  24.   
  25. 2.JSON解析规律  
  26. * { } --> NSDictionary @{ }  
  27. * [ ] --> NSArray @[ ]  
  28. " " --> NSString @" "  
  29. 10 --> NSNumber @10  
  30.   
  31. 四、NSURLConnection  
  32. 1.发布异步请求01--block回调  
  33. + (void)sendAsynchronousRequest:(NSURLRequest*) request  
  34.     queue:(NSOperationQueue*) queue  
  35.     completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler  
  36. * request : 需要发送的请求  
  37. * queue : 一般用主队列,存放handler这个任务  
  38. * handler : 当请求完毕后,会自动调用这个block  
  39.   
  40. 2.利用NSURLConnection发送请求的基本步骤  
  41. 1> 创建URL  
  42. NSURL *url = [NSURL URLWithString:@"http://4234324/5345345"];  
  43.   
  44. 2> 创建request  
  45. NSURLRequest *request = [NSURLRequest requestWithURL:url];  
  46.   
  47. 3> 发送请求  
  48. [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:  
  49.  ^(NSURLResponse *response, NSData *data, NSError *connectionError) {  
  50.      4> 处理服务器返回的数据  
  51.  }];  
  52.   
  53. 五、XML  
  54. 1.语法  
  55. 1> 文档声明  
  56. <?xml version="1.0" encoding="UTF-8" ?>  
  57.   
  58. 2> 元素  
  59. 3> 属性  
  60. <videos>  
  61.     <video name="zhangsan" length="10"/>  
  62.     <video name="lisi" length="10"/>  
  63. </videos>  
  64. * videos和video是元素(节点)  
  65. * name和length叫做元素的属性  
  66. * video元素是videos元素的子元素  
  67.   
  68. 2.解析  
  69. 1> SAX解析:逐个元素往下解析,适合大文件  
  70. * NSXMLParser  
  71.   
  72. 2> DOM解析:一口气将整个XML文档加载进内存,适合小文件,使用最简单  
  73. * GDataXML  
  74.   
  75. 六、HTTP的通信过程  
  76. 1.请求  
  77. 1> 请求行 : 请求方法、请求路径、HTTP协议的版本  
  78. GET /MJServer/resources/images/1.jpg HTTP/1.1  
  79.   
  80. 2> 请求头 : 客户端的一些描述信息  
  81. * User-Agent : 客户端的环境(软件环境)  
  82.   
  83. 3> 请求体 : POST请求才有这个东西  
  84. * 请求参数,发给服务器的数据  
  85.   
  86. 2.响应  
  87. 1> 状态行(响应行): HTTP协议的版本、响应状态码、响应状态描述  
  88. HTTP/1.1 200 OK  
  89.   
  90. 2> 响应头:服务器的一些描述信息  
  91. * Content-Type : 服务器返回给客户端的内容类型  
  92. * Content-Length : 服务器返回给客户端的内容的长度(比如文件的大小)  
  93.   
  94. 3> 实体内容(响应体)  
  95. * 服务器返回给客户端具体的数据,比如文件数据  
  96.   
  97. 七、HTTP的请求方法  
  98. 1.GET  
  99. 1> 特点  
  100. * 所有请求参数都拼接在url后面  
  101.   
  102. 2> 缺点  
  103. * 在url中暴露了所有的请求数据,不太安全  
  104. * url的长度有限制,不能发送太多的参数  
  105.   
  106. 3> 使用场合  
  107. * 如果仅仅是向服务器索要数据,一般用GET请求  
  108.   
  109. 4> 如何发送一个GET请求  
  110. * 默认就是GET请求  
  111. // 1.URL  
  112. NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];  
  113. // 2.请求  
  114. NSURLRequest *request = [NSURLRequest requestWithURL:url];  
  115. // 3.发送请求  
  116. [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {  
  117. }];  
  118.   
  119. 2.POST  
  120. 1> 特点  
  121. * 把所有请求参数放在请求体(HTTPBody)中  
  122. * 理论上讲,发给服务器的数据的大小是没有限制  
  123.   
  124. 2> 使用场合  
  125. * 除开向服务器索要数据以外的请求,都可以用POST请求  
  126. * 如果发给服务器的数据是一些隐私、敏感的数据,绝对要用POST请求  
  127.   
  128. 3> 如何发送一个POST请求  
  129. // 1.创建一个URL : 请求路径  
  130. NSURL *url = [NSURL URLWithString:@"http://xxxxxx/login"];  
  131.   
  132. // 2.创建一个请求  
  133. NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];  
  134. // 设置请求方法  
  135. request.HTTPMethod = @"POST";  
  136. // 设置请求体 : 请求参数  
  137. NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", usernameText, pwdText];  
  138. // NSString --> NSData  
  139. request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];  
  140.   
  141. 八、NSMutableURLRequest的常用方法  
  142. 1.设置超时  
  143. request.timeoutInterval = 5;  
  144. // NSURLRequest是不能设置超时的,因为这个对象是不可变的  
  145.   
  146. 九、URL转码  
  147. 1.URL中不能包含中文,得对中文进行转码(加上一堆的%)  
  148. NSString *urlStr = [NSString stringWithFormat:@"http://xxxxxx/login?username=喝喝&pwd=123"];  
  149. urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  150.   
  151.   
  152. 十、数据安全  
  153. 1.网络数据加密  
  154. 1> 加密对象:隐私数据,比如密码、银行信息  
  155. 2> 加密方案  
  156. * 提交隐私数据,必须用POST请求  
  157. * 使用加密算法对隐私数据进行加密,比如MD5  
  158. 3> 加密增强:为了加大破解的难度  
  159. * 对明文进行2次MD5 : MD5(MD5($pass))  
  160. * 先对明文撒盐,再进行MD5 : MD5($pass.$salt)  
  161.   
  162. 2.本地存储加密  
  163. 1> 加密对象:重要的数据,比如游戏数据  
  164.   
  165. 3.代码安全问题  
  166. 1> 现在已经有工具和技术能反编译出源代码:逆向工程  
  167. * 反编译出来的都是纯C语言的,可读性不高  
  168. * 最起码能知道源代码里面用的是哪些框架  
  169.   
  170. 2> 参考书籍:《iOS逆向工程》  
  171.   
  172. 3> 解决方案:发布之前对代码进行混淆  
  173. * 混淆之前  
  174. @interface HMPerson :NSObject  
  175. - (void)run;  
  176. - (void)eat;  
  177. @end  
  178.   
  179. * 混淆之后  
  180. @interface A :NSObject  
  181. - (void)a;  
  182. - (void)b;  
  183. @end  
  184.   
  185. 十一、监测网络状态  
  186. 1.主动监测监测网络状态  
  187. // 是否WIFI  
  188. + (BOOL)isEnableWIFI {  
  189.     return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);  
  190. }  
  191.   
  192. // 是否3G  
  193. + (BOOL)isEnable3G {  
  194.     return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);  
  195. }  
  196.   
  197. 2.监控网络状态  
  198. 1> 监听通知  
  199. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];  
  200.   
  201. 2> 开始监听网络状态  
  202. // 获得Reachability对象  
  203. self.reachability = [Reachability reachabilityForInternetConnection];  
  204. // 开始监控网络  
  205. [self.reachability startNotifier];  
  206.   
  207. 3> 移除监听  
  208. [self.reachability stopNotifier];  
  209. [[NSNotificationCenter defaultCenter] removeObserver:self];

0 0
原创粉丝点击