關(guān)于網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求

本文主要記錄筆者在ios7之前后所用的數(shù)據(jù)請(qǐng)求方式匣摘,以及現(xiàn)在常用到的AFN數(shù)據(jù)請(qǐng)求的封裝(本文依然是筆者作為筆記使用,如有錯(cuò)誤的地方還望指正熊响,共同學(xué)習(xí))

1.請(qǐng)求(同步)

// 1.獲取URl字符串

? ? //? NSString *urlString = KUrl;

? ? // 2.將URL字符串轉(zhuǎn)化成NSURL對(duì)象

? ? NSURL *url = [NSURL URLWithString:KUrl];

? // 3.創(chuàng)建請(qǐng)求對(duì)象


? ? // 如果沒(méi)有網(wǎng)絡(luò)缠捌,直接return 不再請(qǐng)求數(shù)據(jù)

? //? if (![[NetWorkState shareInstance]reachability]) {

? ? ? //? return;

? //? }

? ? NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];

? ? // 4.1.設(shè)置請(qǐng)求方式 默認(rèn)是GEt請(qǐng)求

? ? [request setHTTPMethod:@"GET"];

? 4.2 設(shè)置POST請(qǐng)求的樣式

[request setHTTPMethod:@"POST"];

? [request setHTTPBody:postData]; // postData 是數(shù)據(jù)請(qǐng)求的參數(shù)

? ? // 5.創(chuàng)建同步鏈接

? ? NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

? // NSLog(@"%@",data);

? ? // 6.根據(jù)請(qǐng)求下來(lái)的data 解析data

? ? id ?dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

2.異步請(qǐng)求

方式1中的第五步之前所有代碼一樣

5.1 ?將當(dāng)前類設(shè)為代理患朱,進(jìn)行異步的數(shù)據(jù)請(qǐng)求

[NSURLConnection connectionWithRequest:request delegate:self];

#pragma mark ---------當(dāng)服務(wù)器開(kāi)始請(qǐng)求調(diào)用的方法 ------------

// 向服務(wù)器發(fā)送請(qǐng)求 服務(wù)器有響應(yīng)之后會(huì)調(diào)用此方法

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

{

? ? self.receiveData = [NSMutableData data];

?? NSLog(@"服務(wù)器有相應(yīng)");

}

#pragma mark -------- 當(dāng)服務(wù)器開(kāi)始傳輸?shù)臅r(shí)候 ------------

//此方法中 我們要進(jìn)行拼接數(shù)據(jù) 此方法會(huì)根據(jù)數(shù)據(jù)的大小 執(zhí)行不定的次數(shù) 直到所有數(shù)據(jù)拼接完成

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

? ? [self.receiveData appendData:data];

? ? NSLog(@"服務(wù)器開(kāi)始傳輸數(shù)據(jù)");

}

#pragma mark --------當(dāng)服務(wù)器結(jié)束傳輸?shù)臅r(shí)候 ---------

// 相當(dāng)于 傳輸數(shù)據(jù)完畢 我們已經(jīng)拿到了所有的data 再次方法中解析數(shù)據(jù)

-(void)connectionDidFinishLoading:(NSURLConnection *)connection

{

? ? NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.receiveData options:NSJSONReadingMutableContainers error:nil]

? ? [self.tableView reloadData];


? ? NSLog(@"服務(wù)器結(jié)束傳輸數(shù)據(jù)");

}

#pragma mark -----------請(qǐng)求失敗 ------------

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

{

? ?NSLog(@"請(qǐng)求失敗");

}

5.2 block請(qǐng)求(不常用)

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {


? ? ? ? NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

? ? ? ? blockSelf.dataArray = [Model jsonConfigue:dic];

// 進(jìn)行頁(yè)面的刷新 ? ? ? ?[blockSelf.tableView reloadData];

? ? }];

3,ios7 之后旭斥,蘋(píng)果新出了一個(gè)NSURLSession類來(lái)進(jìn)行數(shù)據(jù)請(qǐng)求

NSURL *url = [NSURL URLWithString:urlString];

1.//初始化request 并配置httpBody httpMethod

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:30];

// post請(qǐng)求

request.HTTPBody = [@"postData" dataUsingEncoding:NSUTF8StringEncoding];

request.HTTPMethod = @"POST";

// get請(qǐng)求

request.HTTPMethod = @"GET";

2 //配置session 并讓task開(kāi)始執(zhí)行

NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

? ? ? ? NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

}];

[task resume];

4.AFN的封裝


? ? if ([self isNetWorkConnectAvailiable]) {

? ? // 創(chuàng)建一個(gè)請(qǐng)求對(duì)象

? ? AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

? ? // 請(qǐng)求https

? ? ? // [manager setSecurityPolicy:securityPolicy];

? ? ? ? manager.securityPolicy.allowInvalidCertificates = YES;

? ? ? ? manager.securityPolicy.validatesDomainName = NO;

? ?// 設(shè)置請(qǐng)求格式

? ? manager.requestSerializer = [AFHTTPRequestSerializer serializer];

? // 設(shè)置響應(yīng)格式

? ? manager.responseSerializer = [AFHTTPResponseSerializer serializer];


? ? ? ? // manager.requestSerializer = [AFJSONRequestSerializer new];

?? ?// 設(shè)置超時(shí)時(shí)間

? ? ? ? manager.requestSerializer.timeoutInterval = 20.0f;

? ? // 響應(yīng)的類型

? ? [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/css", @"text/plain",@"application/x-javascript",@"text/xml", nil]];

? ? // 設(shè)置頭

? ? ? ? if (![url isEqualToString:ZGR_LOGIN]) {

? ? ? ? ? ? [manager.requestSerializer setValue:[[NSUserDefaults standardUserDefaults] valueForKey:@"httpHeader"] forHTTPHeaderField:@"headpost"];

? ? ? ? }

? ? ? ?NSLog(@"-=-=-%@",manager.requestSerializer.HTTPRequestHeaders);

? // UIView *view = [[UIApplication sharedApplication].delegate window];

? ? ? ? MBProgressHUD *hud = [[MBProgressHUD alloc]init];

? ? ? ? if (hudView) {

? ? ? ? ? hud = [MBProgressHUD showHUDAddedTo:hudView animated:YES];

? ? ? ? }

? ? ? hud.backgroundColor = [UIColor whiteColor];

? ?hud.mode = MBProgressHUDModeIndeterminate;

? ? ? ?[manager POST:url parameters:dic success:^(NSURLSessionDataTask * _Nonnull task, id? _Nonnull responseObject) {

? ? ? ? ? ? if ([dic isKindOfClass:[NSString class]]) {

? ? ? ? ? ? ? ? id result = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];

? ? ? ? ? ? ? ?[hud hideAnimated:YES];

? ? ? ? ? ? ? ? block(result);

? ? ? ? ? ? }

? ? ? ? ? ? else

? ? ? ? ? ? {

? ? ? ? ? ? id result = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];

? ? ? ? ? ?[hud hideAnimated:YES];

? ? ? ? ? ? block(result);

? ? ? ? ? ? }

? ? ? ? } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

? ? ? ? ? ? hud.label.text = @"加載失敗,請(qǐng)檢查網(wǎng)絡(luò)";

? ? ? ? ? ? //? [hud hideAnimated:YES afterDelay:0.5];


? ? ? ? ? ? failureBlock(error);

? ? ? ? }];

? ? }


? ? else

? ? {


? ? UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"無(wú)網(wǎng)絡(luò)連接, 請(qǐng)重新檢查網(wǎng)絡(luò)" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];

? ? ? ? alert.delegate = self;

? ? ? ? [alert show];

? ? ? ? failureBlock(nil);

? ? }

本文是筆者對(duì)先前所用到的數(shù)據(jù)請(qǐng)求方式的總結(jié)記錄容达,若有錯(cuò)誤的地方,請(qǐng)指正

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垂券,一起剝皮案震驚了整個(gè)濱河市花盐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌圆米,老刑警劉巖卒暂,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異娄帖,居然都是意外死亡也祠,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)近速,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诈嘿,“玉大人,你說(shuō)我怎么就攤上這事削葱〗毖牵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵析砸,是天一觀的道長(zhǎng)昔字。 經(jīng)常有香客問(wèn)我,道長(zhǎng)首繁,這世上最難降的妖魔是什么作郭? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮弦疮,結(jié)果婚禮上夹攒,老公的妹妹穿的比我還像新娘。我一直安慰自己胁塞,他們只是感情好咏尝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布压语。 她就那樣靜靜地躺著,像睡著了一般编检。 火紅的嫁衣襯著肌膚如雪胎食。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天蒙谓,我揣著相機(jī)與錄音斥季,去河邊找鬼。 笑死累驮,一個(gè)胖子當(dāng)著我的面吹牛酣倾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谤专,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼躁锡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了置侍?” 一聲冷哼從身側(cè)響起映之,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜡坊,沒(méi)想到半個(gè)月后杠输,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秕衙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蠢甲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片据忘。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹦牛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勇吊,到底是詐尸還是另有隱情曼追,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布汉规,位于F島的核電站礼殊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏针史。R本人自食惡果不足惜膏燕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悟民。 院中可真熱鬧,春花似錦篷就、人聲如沸射亏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)智润。三九已至及舍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窟绷,已是汗流浹背锯玛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兼蜈,地道東北人攘残。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像为狸,于是被迫代替她去往敵國(guó)和親歼郭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容