GET 与 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(@"完成请求, 此时可以进行数据解析");
}