GET请求和POST请求剖析
来源:互联网 发布:如何加强网络文化建设 编辑:程序博客网 时间:2024/06/13 09:31
在HTTP/1.1协议中,定义了8种发送http请求的方法
GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH
根据HTTP协议的设计初衷,不同的方法对资源有不同的操作方式
PUT :增
DELETE :删
POST:改
GET:查
最常用的是GET和POST(实际上GET和POST都能办到增删改查)
要想使用GET和POST请求跟服务器进行交互,得先了解一个概念
参数
就是传递给服务器的具体数据,比如登录时的帐号、密码
缓存是针对URL而言的。
GET与Post的比较如下:
GET的本质是“得”
从服务器拿数据,效率更高。
从数学的角度讲,GET的结果是“幂等”的
GET请求能够被缓存
在HTTP协议中,没有对GET请求的数据大小限制,不过因为浏览器的不同,一般限制在 2~8k之间
所有的参数包装在URL中,并且服务器的访问日志会记录,不要传递密码账户的敏感信息。
参数格式:?在资源路径末尾添加?表示追加参数。
变量名=变量值 每一个变量及值按照”变量名=变量值”方式设定,不能包含空格或者中文字符
& 多个参数使用&连接。
POST
POST的本质是给。
向服务器发送数据,也可以获得服务器处理之后的结果,效率不如GET。
POST请求不能被缓存
POST提交数据比较大,大小靠服务器的设定值限制,PHP通常设定2M。
URL中只有资源路径,但不包含参数,服务器日志不会记录参数,相对更安全。
参数被包装成二进制数据体,格式与GET基本一致,只是不包含 ?
所有涉及用户隐私的数据(密码,银行卡账号)一定要使用POST方式传递。
URL GET方法 在网络访问的URL中不能包含空格以及中文等特殊符号。
新建工程,代码如下:
<span style="font-size:18px;">//// ViewController.m// 05-用户登录//// Created by apple on 15/1/20.// Copyright (c) 2015年 apple. All rights reserved./** GET和POST比较 - url GET: http://127.0.0.1/login.php?username=%@&password=%@ 1. http://127.0.0.1主机地址 2. login.php是服务器负责登录的脚本(php,java) 3. ? 后面的就是参数,是给服务器传递的参数 参数的格式 变量名=值 username=@"zhangsan" 4. & 如果是多个参数,通过这个进行连接。 注意点: url不能包含中文或者空格及特殊符号, 如果有需要转义 urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; POST: 只是一个单纯的资源路径(没有任何参数,因为参数都在数据体里) - request GET - 什么都不需要指定,因为默认的HTTPMethod 就是“GET” POST - 1. 需要指定HTTPMethod 是POST 2. 指定了数据体的二进制. POST出现中文,也不需要转义,(系统帮我们实现了) *** POST的参数和GET在URL里的参数,格式是一样的。 只是没有 ? - Connection 都一样 */#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [self postLogin]; }/**POST*/- (void)postLogin{ // 1. url NSString *urlString = @"http://127.0.0.1/login.php"; NSURL *url = [NSURL URLWithString:urlString]; // 2. 可变的请求 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:2.0f]; // 2.1 指定http的访问方法,服务器短才知道如何访问 request.HTTPMethod = @"POST"; // 2.2 指定数据体,数据体的内容可以从firebug里面直接拷贝 // username=zhangsan&password=zhang NSString *username = @"张三"; NSString *pwd = @"zhang"; NSString *bobyStr = [NSString stringWithFormat:@"username=%@&password=%@", username, pwd]; // 2.2.1 跟服务器的交互,全部传递的二进制 request.HTTPBody = [bobyStr dataUsingEncoding:NSUTF8StringEncoding]; // 3. 连接 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 反序列化 id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]; NSLog(@"%@", result); }];}- (void)getLogin{ /** GET http://127.0.0.1/login.php?username=%@&password=%@ 1. http://127.0.0.1主机地址 2. login.php是服务器负责登录的脚本(php,java) 3. ? 后面的就是参数,是给服务器传递的参数 参数的格式 变量名=值 username=@"zhangsan" 4. & 如果是多个参数,通过这个进行连接。 */ // 1. url NSString *username = @"张三"; NSString *pwd = @"zhang"; NSString *urlString = [NSString stringWithFormat:@"http://192.168.10.9/login.php?username=%@&password=%@",username, pwd]; // url里面不能包含中文空格特殊符号 // 如果有,需要百分号转义 urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlString]; // 2. 请求 NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:2.0f]; // 3. 连接 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 反序列化 id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]; NSLog(@"%@", result); }]; }@end</span>运行结果如下:
- GET请求和POST请求剖析
- get请求和post请求
- get请求和post请求
- GET请求和POST请求
- GET请求和POST请求
- GET请求和POST请求
- GET请求和POST请求
- GET请求和POST请求
- POST请求和GET请求
- get请求和post请求
- GET和POST请求
- Get和Post请求
- post和get请求
- Get和Post请求
- post和get请求
- get和post请求
- get和post请求
- post和get请求
- Mysql常用命令(二)
- 人工智能的技术路线
- 利用bigDecimal直接截取小数位数
- 人工智能课程学习
- 一个空格引起的“惨案”
- GET请求和POST请求剖析
- mysql创建数据库实例和导入数据
- 【转】有关maven by:buzhucele
- JAVA 学习(1)
- 自定义Animation动画,完成跑圈动作
- Scrapy 爬虫框架爬取网页数据
- cocos2dx3.3视频播放的实现VideoPlayer的使用
- HDU3953(找规律,坑~)
- 小记天池大赛