CYC- 數據解析2

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(@"完成請求, 此時可以進行數據解析");
}
發佈了33 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章