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(@"完成請求, 此時可以進行數據解析");
}