get和post请求方式
来源:互联网 发布:Java工程打包 编辑:程序博客网 时间:2024/05/20 15:38
get和post两种请求方式的比较:
1、给服务器传输数据的方式:
GET:通过网址字符串。
POST:通过data
2、传输数据的大小:
GET:网址字符串最多255字节。
POST:使用NSData,容量超过1G
3、安全性:GET:所有传输给服务器的数据,显示在网址⾥,类似于密码的明⽂输入,直接可见。
POST:数据被转成NSData(⼆进制数据),类似于密码的密⽂输入,无法直接读取。
同步连接:程序容易出现卡死现象(在主线程中操作), 请求完成之后, 才可进行其他操作. 弊端: 用户体验很差
异步连接:等待数据返回, 请求未完成时, 不影响程序任何操作(在子线程中操作), 用户体验好. 弊端: 相对同步来讲占用资源多(但是相对手机来讲基本可以忽略不计)
异步联接有两种实现⽅式:
设置代理,接收数据
实现block
下面介绍get的同步请求和异步请求
#define kGetURL @"http://api.map.baidu.com/place/v2/search?query=银行®ion=上海&output=json&ak=6E823f587c95f0148c19993539b99295"@interface GetViewController () <NSURLConnectionDataDelegate>// 声明一个可变data, 用来拼接接收的数据@property (nonatomic, retain) NSMutableData *data;@end@implementation GetViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self setNavigationView];}
#pragma mark - Get同步按钮的实现- (void)actionLeftButton:(UIBarButtonItem *)leftButton { // 1. 获取请求网址, 转换为NSURL对象 // 请求网址中包含中文时一定要转码, 需要转码后再进行请求, 否则会出现乱码 NSString *url = [kGetURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *newUrl = [NSURL URLWithString:url]; // 2. 创建一个请求 使用NSURLRequest类 // timeoutInterval:(NSTimeInterval): 设置请求失败的时间, 以秒为单位 // 设置成可变的url是为了之后设置请求方式, 若是get请求 可以直接用不可变, 因为默认是get请求 不用手动设置 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:newUrl cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10.0]; // 3. 设置请求方式, 默认是get请求, [request setHTTPMethod:@"Get"]; // 4. 接收返回数据, 以二进制形式返回 // NSURLConnection---创建链接的, 通过这个链接返回数据 // 服务器返回的信息(是服务器信息) NSURLResponse *response = nil; // 请求失败的错误信息 NSError *error = nil; // data是要用的信息 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; // 进行解析, 展示数据 NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];}
#pragma mark - Get异步按钮的实现- (void)actionRightButton:(UIBarButtonItem *)RightButton{ // 1. 获取网址, 如果有中文, 则需要转码, 转换成NSURL NSString *url = [kGetURL stringByAddingPercentEscapesUsingEncoding:(NSUTF8StringEncoding)]; NSURL *newUrl = [NSURL URLWithString:url]; // 2. 创建一个请求, NSURLRequest类 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:newUrl cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10.0]; // 3. 设置请求方式 [request setHTTPMethod:@"Get"]; // 异步请求方法一: 利用代理方法: // 设置代理: 需要指定一个请求, 了解是哪条请求异步链接 [NSURLConnection connectionWithRequest:request delegate:self]; // 异步请求方法二: block方法 [NSURLConnection sendAsynchronousRequest:request queue:([NSOperationQueue mainQueue]) completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 回到主线程, 解析数据 // 如果你需要进度的话, 那么请你去使用方法1. NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil]; NSLog(@"%@", dic); }];}
#pragma mark - get异步请求, 代理方法#pragma mark 已经接收到信息时触发 (刚一开始就触发, 只触发一次)- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { // 初始化一个可变的data对象, 在其他方法中进行拼接 self.data = [NSMutableData data]; NSLog(@"response = %@ --------", response);}#pragma mark 开始接收到数据时触发 (多次触发, 每次返回一小部分数据)- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { // 需要对NSDate进行拼接, 需要获取完整的数据 [self.data appendData:data]; NSLog(@"执行拼接呦~");}#pragma mark 数据接收完成(解析数据, 显示数据)- (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.data options:(NSJSONReadingMutableContainers) error:nil];}#pragma mark 请求失败或者请求中断时才会触发- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {}
#define kPostURL @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"#define kPostParam @"date=20131129&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213"@interface PostViewController () <NSURLConnectionDataDelegate>@property (nonatomic, retain) NSMutableData *data;@end@implementation PostViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self setNavigationView];}
#pragma mark - Post同步按钮的实现- (void)actionLeftButton { // 1. 获取网址 NSURL *url = [NSURL URLWithString:kPostURL]; // 2. 创建网络请求 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10.0]; // 3. 设置请求类型 [request setHTTPMethod:@"Post"]; // 4. 创建一个NSData的参数, 并转化成UTF-8编码格式 NSData *paramData = [kPostParam dataUsingEncoding:NSUTF8StringEncoding]; // 5. 携带参数 (可以携带多个参数, 但是并不常见) [request setHTTPBody:paramData]; // 6. 创建链接并转化为data数据 NSURLResponse *response = nil; NSError *error = nil; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSLog(@"%@", response); // 7. 解析数据 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil];}
#pragma mark - Post异步按钮的实现- (void)actionRightButton { NSURL *url = [NSURL URLWithString:kPostURL]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10.0]; [request setHTTPMethod:@"Post"]; NSData *paramData = [kPostParam dataUsingEncoding:NSUTF8StringEncoding]; [request setHTTPBody:paramData]; // 使用代理方法解析 [NSURLConnection connectionWithRequest:request delegate:self]; // block [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil]; }];}
// 代理方法- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { self.data = [NSMutableData data];}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.data appendData:data];}- (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.data options:(NSJSONReadingMutableContainers) error:nil];}
0 0
- 请求方式GET和POST
- get和post请求方式
- get和post请求方式
- get和post请求方式的区别
- post和get请求方式以及区别
- post和get请求方式的区别
- get 和post 方式请求数据
- get和post请求方式的区别
- post和get请求方式以及区别
- 请求方式Get和Post的区别
- HTTP 请求方式: GET和POST
- java网络请求GET和POST方式
- PHP异步请求 POST和GET方式
- get方式和post请求的区别?
- Post和Get请求方式的区别
- Http请求get和post方式
- GET和POST请求方式的区别
- http的post和get请求方式
- 2038问题
- fdk-aac的编码方法
- HDU 2553 N皇后问题 (DFS_回溯)
- 墨墨的等式(equ)题解
- 闲话js前端框架(4)——组件化?有没有后端的事?
- get和post请求方式
- org.hibernate.exception.SQLGrammarException: could not execute query处理方式
- 1小时内必须解决的5个编程问题
- EJB中的注释
- Quartz(二)整合Spring容器中bean及动态调度任务
- Java变量及其传递
- Light oj 1019 - Brush (V)【最短路裸题】
- 在Spring中使用Quartz任务调度支持集群(转载)
- Spring学习笔记——Spring事务只对运行时异常回滚