////GET:將請求所須要傳的參數,直接封裝到URL中,缺點:1、不安全 2、url長度有限制,若是參數較多,會封裝失敗,致使沒法請求
//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