我们在使用网络请求获取数据的时候应该对get有一定的理解,顾名思义get
是从服务器上获取数据,post
是向服务器传送数据。前者把参数数据加在了将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节,后者则是将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。下面就来浅谈一下。
一、浅谈概念
HTTP
定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET
,POST
,PUT
,DELETE
。URL
全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET
,POST
,PUT
,DELETE
就对应着对这个资源的查
,改
,增
,删
4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息,个人认为这是GET和POST的本质区别,也是协议设计者的本意,其它区别都是具体表现形式的差异 。
1.get和post的区别:
1.GET使用URL或Cookie传参。而POST将数据放在BODY中。
2.GET的URL会有长度上的限制,则POST的数据则可以非常大。
3.POST比GET安全,因为数据在地址栏上不可见。
对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。get方式传送的数据量较小,post传输的数据量较大,一般被默认是不受限制的,但是理论上还是有限制的,URL长了,对服务器处理也是一种负担。
二、GET
//1.创建URL对象
NSURL *url = [NSURL URLWithString:@"你要获取的地址"];
//2.建立会话 session支持三种类型的任务
// NSURLSessionDataTask //加载数据
// NSURLSessionDownloadTask //下载
// NSURLSessionUploadTask //上传
NSURLSession *session = [NSURLSession sharedSession];
//3.创建请求任务,(该方法内部默认使用get)直接进行传递url即可
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:@"你刚才的URL" completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//data就是你获取到的数据,你可以自行对其进行解析
//error就是获取失败时出现的问题
}];
//4.启动任务
[dataTask resume];
get使用起来非常简单,仅仅四行代码就能获取大量的信息,但是它仅仅在获取信息的时候好用,你若是想传递信息到服务器,那还是别用get的好,它传递信息无非就是通过URL进行传递,明眼人就能想到,这不就一下把数据泄漏完了,所以get的保密性和安全性都不高,而且URL通常也是有限度的,太长的话会影响后台解析。
三、POST
//1.创建URL对象
NSURL *url = [NSURL URLWithString:@"你要获取的地址"];
//2.创建请求对象
//第一个参数是你的URL
//第二个参数是请求的缓存策略
//第三个参数是设置请求超时时间
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
//3.设置请求方法为post
[request setHTTPMethod:@"POST"];
//4.设置请求头信息
//key(头字段名(不区分大小写)):Content-Type,
//Value(头字段值)为下面三种:(还是得根据后台给的来设置)
//application/x-www-form-urlencoded(后台接收为分开的参数时,如?name=liyu&password=123)
//application/json(后台接收为json对象时)
//multipart/form-data(上传文件时)
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
//5.设置请求体
NSString *param = [NSString stringWithFormat:@"username = %@ & pwd = %@", self.username.text, self.pwd.text];
//把拼接后的字符串转换为data,设置请求体(这个data就是请求体)
request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
//6.建立会话 session支持三种类型的任务
// NSURLSessionDataTask //加载数据
// NSURLSessionDownloadTask //下载
// NSURLSessionUploadTask //上传
NSURLSession *session = [NSURLSession sharedSession];
//7.创建请求任务
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
//data就是你获取到的数据,你可以自行对其进行解析
//error就是获取失败时出现的问题
}];
//8.启动任务
[dataTask resume];
四、小总结
从上边两个不难看出两个的区别,无非就是post多了一个请求体,其他的也没什么区别,但是post的好处还有很多,首先它的保密性和安全性就比较高,所以以后我们还是尽量多使用post请求数据的好,另外上述说的仅仅只是使用系统自带方法的代码,当然你也可以使用第三方库,比如AFNetworking
它使用起来就更加方便。
原文地址:https://blog.csdn.net/m0_55124878/article/details/123651842
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_21520.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!