(简单介绍)介绍iOS开发之GET与POST

因为梦想会发光,所以,无论身处多么漆黑的角落,也总能有一束光,引领我们前往,风雨兼程,跋涉探险,在所不惜。
——苑子文,苑子豪愿我的世界总有你二分之一

简单介绍

一、一个HTTP请求的基本要素###

1.请求URL:客户端通过哪个路径找到服务器

2.请求参数:客户端发送给服务器的数据

  • 比如登录时需要发送的用户名和密码

3.返回结果:服务器返回给客户端的数据

  • 一般是JSON数据或者XML数据

二、基本的HTTP请求的步骤(移动客户端)

1.拼接"请求URL" + "?" + "请求参数"

2.发送请求

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

四、NSURLConnection###

1.发布异步请求01--block回调

 + (void)sendAsynchronousRequest:(NSURLRequest*) request
    queue:(NSOperationQueue*) queue
    completionHandler:(void (^)(NSURLResponse* response,    NSData* data, NSError* connectionError)) handler
// request : 需要发送的请求
// queue : 一般用主队列,存放handler这个任务
// handler : 当请求完毕后,会自动调用这个block
2.利用NSURLConnection发送请求的基本步骤

1> 创建URL

NSURL *url = [NSURL URLWithString:@"http://4234324/5345345"];

2> 创建request

NSURLRequest *request = [NSURLRequest requestWithURL:url];

3> 发送请求
旧方法

[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:
 ^(NSURLResponse *response, NSData *data, NSError *connectionError) {

新方法

    NSURLSession *session = [NSURLSession sharedSession];
    
    NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
       
}

4> 处理服务器返回的数据
}];

五、XML

1.语法

1> 文档声明

<?xml version="1.0" encoding="UTF-8" ?>

2> 元素
3> 属性

<videos>
    <video name="小黄人 第01部" length="10"/>
    <video name="小黄人 第01部" length="10"/>
</videos>
// videos和video是元素(节点)
// name和length叫做元素的属性
//video元素是videos元素的子元素
2.解析

1> SAX解析:逐个元素往下解析,适合大文件

  • NSXMLParser

2> DOM解析:一口气将整个XML文档加载进内存,适合小文件,使用最简单

  • GDataXML
七、HTTP的请求方法
1.GET

1> 特点

  • 所有请求参数都拼接在url后面

2> 缺点

  • 在url中暴露了所有的请求数据,不太安全
  • url的长度有限制,不能发送太多的参数

3> 使用场合

  • 如果仅仅是向服务器索要数据,一般用GET请求

4> 如何发送一个GET请求

  • 默认就是GET请求
// 1.URL
NSURL *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.POST

1> 特点

  • 把所有请求参数放在请求体(HTTPBody)中
  • 理论上讲,发给服务器的数据的大小是没有限制

2> 使用场合

  • 除开向服务器索要数据以外的请求,都可以用POST请求
  • 如果发给服务器的数据是一些隐私、敏感的数据,绝对要用POST请求

3> 如何发送一个POST请求

// 1.创建一个URL : 请求路径
NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/login"];

// 2.创建一个请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 设置请求方法
request.HTTPMethod = @"POST";
// 设置请求体 : 请求参数
NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", usernameText, pwdText];
// NSString --> NSData
request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];

八、NSMutableURLRequest的常用方法

1.设置超时
request.timeoutInterval = 5;
// NSURLRequest是不能设置超时的,因为这个对象是不可变的

九、URL转码

1.URL中不能包含中文,得对中文进行转码(加上一堆的%)
NSString *urlStr = [NSString stringWithFormat:@"http://localhost/login?username=喝喝&pwd=123"];
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// urlStr == @"http://localhost/login?username=%E5%96%9D%E5%96%9D&pwd=123"

十、数据安全

1.网络数据加密

1> 加密对象:隐私数据,比如密码、银行信息
2> 加密方案

  • 提交隐私数据,必须用POST请求
  • 使用加密算法对隐私数据进行加密,比如MD5
    3> 加密增强:为了加大破解的难度
  • 对明文进行2次MD5 : MD5(MD5($pass))
  • 先对明文撒盐,再进行MD5 : MD5($pass.$salt)
2.本地存储加密

1> 加密对象:重要的数据,比如游戏数据

3.代码安全问题

1> 现在已经有工具和技术能反编译出源代码:逆向工程

  • 反编译出来的都是纯C语言的,可读性不高
  • 最起码能知道源代码里面用的是哪些框架

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];


* 注意:这里安全的含义仅仅是指是非修改信息。
 POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,802评论 6 13
  • JSON JSON和XML都是需要解析的 JSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据...
    JonesCxy阅读 1,820评论 2 10
  • 再过一个月我就要毕业了,还有几天就要毕业考试,我还在找工作的深渊里不能自拔,我是一个挺挑剔的人,总觉得早八晚五的生...
  • 在很久很久以前,小猫和小狗是很要好的小伙伴,主人对小猫和小狗也非常的好,经常带着它们俩一起出去玩。 有天主人像往常...
    小鹿森林笔记阅读 286评论 0 0