CYC- 数据解析2
2015-09-28 12:07
204 查看
GET 与 POST 区别
1. get请求 请求的网址 全部明文显示 安全性不高
2. get请求 请求的网址 有字符数的限制 大概255个
3. post 请求 请求的网址 不光是有一个请求的网址 还可以携带 请求体 这个请求体 是以NSData形式携带 NSDATA(以二进制形式存在) 安全性较高
4. post请求 网址没有字符数限制
一般公司都使用 post请求
1. get请求 请求的网址 全部明文显示 安全性不高
2. get请求 请求的网址 有字符数的限制 大概255个
3. post 请求 请求的网址 不光是有一个请求的网址 还可以携带 请求体 这个请求体 是以NSData形式携带 NSDATA(以二进制形式存在) 安全性较高
4. post请求 网址没有字符数限制
一般公司都使用 post请求
#import "SecondViewController.h" @interface SecondViewController ()<NSURLConnectionDataDelegate, NSURLConnectionDelegate> // 声明一个可变data 进行异步请求接收数据 @property (nonatomic, retain) NSMutableData *data; // 声明属性 再界面被消毁的时候 用于终止网络请求 @property (nonatomic ,retain) NSURLConnection *connection; @end @implementation SecondViewController
- (void)dealloc { [_connection release]; [_data release]; [_connection cancel]; [super dealloc]; }
- (void)viewDidLoad { [self addBarButtonItme]; [super viewDidLoad]; // Do any additional setup after loading the view. }
- (void)addBarButtonItme { UIBarButtonItem *leftButton = [[ UIBarButtonItem alloc] initWithTitle:@"Post同步" style:(UIBarButtonItemStylePlain) target:self action:@selector(actionLeft:)]; self.navigationItem.leftBarButtonItem = leftButton; [leftButton release]; UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithTitle:@"Post异步" style:(UIBarButtonItemStylePlain) target:self action:@selector(actionRight:)]; self.navigationItem.rightBarButtonItem = rightButton; [rightButton release]; }
#pragma mark - Post同步请求 - (void)actionLeft:(UIBarButtonItem *)leftButton { // 创建 网址对象 NSURL *url = [NSURL URLWithString:kNewsListURL]; // 利用网址对象 创建一个请求 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:30.0]; // 设置请求类型 [request setHTTPMethod:@"POST"]; // 注意:给这个请求 携带一个请求体 // 构建一个请求体 NSData类型 NSData *pramData = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding]; // 携带到 请求当中 [request setHTTPBody:pramData]; // 利用这个请求 创建一个链接 并得到返回的数据 NSURLResponse *response = nil; NSError *error = nil; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableContainers) error:nil]; NSLog(@"%@", dataDic); }
- (void)actionRight:(UIBarButtonItem *)rightButton { // 利用网址字符串 创建网址对象 NSURL *url = [NSURL URLWithString:kNewsListURL]; // 利用网址对象 创建请求 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; // 设置请求的类型 [request setHTTPMethod:@"POST"]; // 给这个请求 携带请求体 NSData *paramData = [kNewsListParam dataUsingEncoding:NSUTF8StringEncoding]; [request setHTTPBody:paramData]; /* // 利用Block方法 完成异步请求 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // data 就是异步请求完成的数据 解析就行 // 解析数据 NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@", dataDic); // 剥香蕉 }]; */ // 利用请求 创建链接 利用代理方法 实现异步请求数据 self.connection = [NSURLConnection connectionWithRequest:request delegate:self]; [self.connection start]; }
#pragma mark - 代理方法实现 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"请求失败,错误信息"); } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { self.data = [NSMutableData data]; NSLog(@"返回服务器信息, 证明链接成功了"); } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { // 拼接 [self.data appendData:data]; NSLog(@"每次返回一点数据 多次执行"); } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSMutableDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:(self.data) options:(NSJSONReadingMutableContainers) error:nil]; NSLog(@"%@", dataDic); NSLog(@"完成请求, 此时可以进行数据解析"); }