網絡請求數據(同步GET,異步GET)

////GET:將請求所須要傳的參數,直接封裝到URL中,缺點:1、不安全  2url長度有限制,若是參數較多,會封裝失敗,致使沒法請求
//POST:包含基礎的url以及參數體,也就是說,參數跟url是分開的,比較安全且不用顧慮url的長度
//同步:當執行某個操做時,只有當其徹底執行結束,纔回去執行下面的操做,缺點:若是遇到耗時操做,會比較卡
//異步:多個任務同時執行

#import "ViewController.h"

#define BaseUrl @"http://www.haninfo.cc:2060/Login/LoginData.asmx/Login"
@interface ViewController ()<NSURLConnectionDelegate,NSURLSessionDataDelegate>{
     NSMutableData *_muData;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    //8---調用同步GET
    [self synchronizeGET];
    //5*&*******調用異步GET
    [self asynchronizeGET];
}
//同步GET
-(void)synchronizeGET{
    //1---獲取網絡接口----//初始化一個包含參數的完整的字符串(接口地址)
    NSString * urlDtr = [NSString stringWithFormat:@"%@?sLogin=%@&sVerifyCode=%@&sPadId=%@",BaseUrl,@"yyj",@"",@""];
    //2---將接口字符串轉換爲url
    NSURL * url = [NSURL URLWithString:urlDtr];
    //3---發送URL請求-----//建立請求,第一個參數表明請求的地址,第二個參數表明緩存機制的選擇,第三個參數表明超時時間
    NSURLRequest * request = [NSURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:10];
    //4---用於獲取請求--//用於獲取服務器返回的頭信息
    NSURLResponse * response = nil;
    //5----用於獲取錯誤信息
    NSError * err = nil;
    //6---將URL轉換爲數據---//發送一個同步請求,第一個參數是請求的request,第二個參數:用於接收頭信息的對象的地址,第三個參數:用於接收錯誤信息的對象的地址
    NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
    //7----解析數據
    id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    NSLog(@"%@",obj);
   
}




-(void)asynchronizeGET{
    //1********獲取網絡接口
    NSString * urlDtr = [NSString stringWithFormat:@"%@?sLogin=%@&sVerifyCode=%@&sPadId=%@",BaseUrl,@"yyj",@"",@""];
    //2********將接口字符串轉換爲url
    NSURL * url = [NSURL URLWithString:urlDtr];
    //3********發送URL請求
    NSURLRequest * request = [NSURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:10];      
    //4********發送異步請求
    //方式一:block
    //    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse    *response, NSData *data, NSError *connectionError) {
    //        id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//        NSLog(@"block:%@",obj);
//    }];
  
    //方式二,比較經常使用--(用一下三個代理方法)
    [NSURLConnection connectionWithRequest:request delegate:self];
   
}
//代理方法
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    //與服務器鏈接成功,通常在此方法進行接收數據對象的初始化
    _muData  = [NSMutableData data];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    //接收到服務器返回數據,將接收到的數據進行拼接,之因此要進行拼接,是爲了不服務器返回數據較大時,致使的分段接收
    [_muData appendData:data];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    //請求結束,能夠在此方法進行解析
    id obj = [NSJSONSerialization JSONObjectWithData:_muData options:NSJSONReadingAllowFragments error:nil];
    NSLog(@"代理:%@",obj);
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
相關文章
相關標籤/搜索