iOS 开发之网络——总结

来源:互联网 发布:ios助手for mac 编辑:程序博客网 时间:2024/05/01 22:44

一、一个HTTP请求的基本要素1.请求URL:客户端通过哪个路径找到服务器2.请求参数:客户端发送给服务器的数据* 比如登录时需要发送的用户名和密码3.返回结果:服务器返回给客户端的数据* 一般是JSON数据或者XML数据二、基本的HTTP请求的步骤(移动客户端)1.拼接"请求URL" + "?" + "请求参数"* 请求参数的格式:参数名=参数值* 多个请求参数之间用&隔开:参数名1=参数值1&参数名2=参数值2* 比如:http://www.baidu.com?username=123&pwd=4562.发送请求3.解析服务器返回的数据三、JSON解析1.利用NSJSONSerialization类解析* JSON数据(NSData) --> Foundation-OC对象(NSDictionary、NSArray、NSString、NSNumber)+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;2.JSON解析规律* { } --> NSDictionary @{ }* [ ] --> NSArray @[ ]* " " --> NSString @" "* 10 --> NSNumber @10四、NSURLConnection1.发布异步请求01--block回调+ (void)sendAsynchronousRequest:(NSURLRequest*) request    queue:(NSOperationQueue*) queue    completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler* request : 需要发送的请求* queue : 一般用主队列,存放handler这个任务* handler : 当请求完毕后,会自动调用这个block2.利用NSURLConnection发送请求的基本步骤1> 创建URLNSURL *url = [NSURL URLWithString:@"http://4234324/5345345"];2> 创建requestNSURLRequest *request = [NSURLRequest requestWithURL:url];3> 发送请求[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler: ^(NSURLResponse *response, NSData *data, NSError *connectionError) {     4> 处理服务器返回的数据 }];五、XML1.语法1> 文档声明<?xml version="1.0" encoding="UTF-8" ?>2> 元素3> 属性<videos>    <video name="zhangsan" length="10"/>    <video name="lisi" length="10"/></videos>* videos和video是元素(节点)* name和length叫做元素的属性* video元素是videos元素的子元素2.解析1> SAX解析:逐个元素往下解析,适合大文件* NSXMLParser2> DOM解析:一口气将整个XML文档加载进内存,适合小文件,使用最简单* GDataXML六、HTTP的通信过程1.请求1> 请求行 : 请求方法、请求路径、HTTP协议的版本GET /MJServer/resources/images/1.jpg HTTP/1.12> 请求头 : 客户端的一些描述信息* User-Agent : 客户端的环境(软件环境)3> 请求体 : POST请求才有这个东西* 请求参数,发给服务器的数据2.响应1> 状态行(响应行): HTTP协议的版本、响应状态码、响应状态描述HTTP/1.1 200 OK2> 响应头:服务器的一些描述信息* Content-Type : 服务器返回给客户端的内容类型* Content-Length : 服务器返回给客户端的内容的长度(比如文件的大小)3> 实体内容(响应体)* 服务器返回给客户端具体的数据,比如文件数据七、HTTP的请求方法1.GET1> 特点* 所有请求参数都拼接在url后面2> 缺点* 在url中暴露了所有的请求数据,不太安全* url的长度有限制,不能发送太多的参数3> 使用场合* 如果仅仅是向服务器索要数据,一般用GET请求4> 如何发送一个GET请求* 默认就是GET请求// 1.URLNSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];// 2.请求NSURLRequest *request = [NSURLRequest requestWithURL:url];// 3.发送请求[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {}];2.POST1> 特点* 把所有请求参数放在请求体(HTTPBody)中* 理论上讲,发给服务器的数据的大小是没有限制2> 使用场合* 除开向服务器索要数据以外的请求,都可以用POST请求* 如果发给服务器的数据是一些隐私、敏感的数据,绝对要用POST请求3> 如何发送一个POST请求// 1.创建一个URL : 请求路径NSURL *url = [NSURL URLWithString:@"http://xxxxxx/login"];// 2.创建一个请求NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];// 设置请求方法request.HTTPMethod = @"POST";// 设置请求体 : 请求参数NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", usernameText, pwdText];// NSString --> NSDatarequest.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];八、NSMutableURLRequest的常用方法1.设置超时request.timeoutInterval = 5;// NSURLRequest是不能设置超时的,因为这个对象是不可变的九、URL转码1.URL中不能包含中文,得对中文进行转码(加上一堆的%)NSString *urlStr = [NSString stringWithFormat:@"http://xxxxxx/login?username=喝喝&pwd=123"];urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];十、数据安全1.网络数据加密1> 加密对象:隐私数据,比如密码、银行信息2> 加密方案* 提交隐私数据,必须用POST请求* 使用加密算法对隐私数据进行加密,比如MD53> 加密增强:为了加大破解的难度* 对明文进行2次MD5 : MD5(MD5($pass))* 先对明文撒盐,再进行MD5 : MD5($pass.$salt)2.本地存储加密1> 加密对象:重要的数据,比如游戏数据3.代码安全问题1> 现在已经有工具和技术能反编译出源代码:逆向工程* 反编译出来的都是纯C语言的,可读性不高* 最起码能知道源代码里面用的是哪些框架2> 参考书籍:《iOS逆向工程》3> 解决方案:发布之前对代码进行混淆* 混淆之前@interface HMPerson :NSObject- (void)run;- (void)eat;@end* 混淆之后@interface A :NSObject- (void)a;- (void)b;@end十一、监测网络状态1.主动监测监测网络状态// 是否WIFI+ (BOOL)isEnableWIFI {    return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] != NotReachable);}// 是否3G+ (BOOL)isEnable3G {    return ([[Reachability reachabilityForInternetConnection] currentReachabilityStatus] != NotReachable);}2.监控网络状态1> 监听通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStateChange) name:kReachabilityChangedNotification object:nil];2> 开始监听网络状态// 获得Reachability对象self.reachability = [Reachability reachabilityForInternetConnection];// 开始监控网络[self.reachability startNotifier];3> 移除监听[self.reachability stopNotifier];[[NSNotificationCenter defaultCenter] removeObserver:self];


0 0
原创粉丝点击