網(wǎng)絡(luò)工具

1.NSURLConnection

2.AFNetworking

3.CFNetwork

//NSURLConnection

//發(fā)送同步請(qǐng)求代碼

// ? ?1.設(shè)置請(qǐng)求路徑

NSString*urlStr=[NSStringstringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];

NSURL*url=[NSURLURLWithString:urlStr];

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

NSURLRequest*request=[NSURLRequestrequestWithURL:url];

// ? ?3.發(fā)送請(qǐng)求

//發(fā)送同步請(qǐng)求,在主線(xiàn)程執(zhí)行

NSData*data=[NSURLConnectionsendSynchronousRequest:request returningResponse:nil error:nil];

//(一直在等待服務(wù)器返回?cái)?shù)據(jù),這行代碼會(huì)卡住荆秦,如果服務(wù)器沒(méi)有返回?cái)?shù)據(jù)待错,那么在主線(xiàn)程UI會(huì)卡住不能繼續(xù)執(zhí)行操作)

NSLog(@"--%d--",data.length);

//發(fā)送異步請(qǐng)求代碼

// ? ?1.設(shè)置請(qǐng)求路徑

NSString*urlStr=[NSStringstringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];

NSURL*url=[NSURLURLWithString:urlStr];

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

NSURLRequest*request=[NSURLRequestrequestWithURL:url];

// ? ?3.發(fā)送請(qǐng)求

//3.1發(fā)送同步請(qǐng)求凡蜻,在主線(xiàn)程執(zhí)行

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

//(一直在等待服務(wù)器返回?cái)?shù)據(jù)般此,這行代碼會(huì)卡住,如果服務(wù)器沒(méi)有返回?cái)?shù)據(jù)饭弓,那么在主線(xiàn)程UI會(huì)卡住不能繼續(xù)執(zhí)行操作)

//3.1發(fā)送異步請(qǐng)求

//創(chuàng)建一個(gè)隊(duì)列(默認(rèn)添加到該隊(duì)列中的任務(wù)異步執(zhí)行)

// ? ?NSOperationQueue *queue=[[NSOperationQueue alloc]init];

//獲取一個(gè)主隊(duì)列

NSOperationQueue*queue=[NSOperationQueuemainQueue];

[NSURLConnectionsendAsynchronousRequest:requestqueue:queuecompletionHandler:^(NSURLResponse*response,NSData*data,NSError*connectionError){

NSLog(@"--block回調(diào)數(shù)據(jù)--%@---%d",[NSThreadcurrentThread],data.length);

//隱藏HUD嘱蛋,刷新UI的操作一定要放在主線(xiàn)程執(zhí)行

[MBProgressHUDhideHUD];

//解析data

/*

{"success":"登錄成功"}

{"error":"用戶(hù)名不存在"}

{"error":"密碼不正確"}

*/

NSDictionary*dict=[NSJSONSerializationJSONObjectWithData:data options:NSJSONReadingMutableLeaveserror:nil];

NSLog(@"%@",dict);

//判斷后患久,在界面提示登錄信息

NSString*error=dict[@"error"];

if(error){

[MBProgressHUDshowError:error];

}else

{

NSString*success=dict[@"success"];

[MBProgressHUDshowSuccess:success];

}

}];

NSLog(@"請(qǐng)求發(fā)送完畢");

//使用異步方法發(fā)送get請(qǐng)求

// ? 2.1設(shè)置請(qǐng)求路徑

NSString*urlStr=[NSStringstringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];

NSURL*url=[NSURLURLWithString:urlStr];

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

// ? ?NSURLRequest *request=[NSURLRequest requestWithURL:url];//默認(rèn)就是GET請(qǐng)求

//設(shè)置請(qǐng)求超時(shí)

NSMutableURLRequest*request=[NSMutableURLRequestrequestWithURL:url];

request.timeoutInterval=5.0;

// ? 2.3.發(fā)送請(qǐng)求

//使用代理發(fā)送異步請(qǐng)求(通常應(yīng)用于文件下載)

NSURLConnection*conn=[NSURLConnectionconnectionWithRequest:requestdelegate:self];

[conn start];

NSLog(@"已經(jīng)發(fā)出請(qǐng)求---");

}

#pragmamark-NSURLConnectionDataDelegate代理方法

/*

*當(dāng)接收到服務(wù)器的響應(yīng)(連通了服務(wù)器)時(shí)會(huì)調(diào)用

*/

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

{

NSLog(@"接收到服務(wù)器的響應(yīng)");

//初始化數(shù)據(jù)

self.responseData=[NSMutableDatadata];

}

/*

*當(dāng)接收到服務(wù)器的數(shù)據(jù)時(shí)會(huì)調(diào)用(可能會(huì)被調(diào)用多次,每次只傳遞部分?jǐn)?shù)據(jù))

*/

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

{

NSLog(@"接收到服務(wù)器的數(shù)據(jù)");

//拼接數(shù)據(jù)

[self.responseData appendData:data];

NSLog(@"%d---%@--",self.responseData.length,[NSThreadcurrentThread]);

}

/*

*當(dāng)服務(wù)器的數(shù)據(jù)加載完畢時(shí)就會(huì)調(diào)用

*/

-(void)connectionDidFinishLoading:(NSURLConnection*)connection

{

NSLog(@"服務(wù)器的數(shù)據(jù)加載完畢");

//隱藏HUD

[MBProgressHUDhideHUD];

//處理服務(wù)器返回的所有數(shù)據(jù)

NSDictionary*dict=[NSJSONSerializationJSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaveserror:nil];

//判斷后浑槽,在界面提示登錄信息

NSString*error=dict[@"error"];

if(error){

[MBProgressHUDshowError:error];

}else

{

NSString*success=dict[@"success"];

[MBProgressHUDshowSuccess:success];

}

NSLog(@"%d---%@--",self.responseData.length,[NSThreadcurrentThread]);

}

/*

*請(qǐng)求錯(cuò)誤(失敗)的時(shí)候調(diào)用(請(qǐng)求超時(shí)\斷網(wǎng)\沒(méi)有網(wǎng)\返帕,一般指客戶(hù)端錯(cuò)誤)

*/

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

{

// ? ? NSLog(@"請(qǐng)求錯(cuò)誤");

//隱藏HUD

[MBProgressHUDhideHUD];

[MBProgressHUDshowError:@"網(wǎng)絡(luò)繁忙桐玻,請(qǐng)稍后重試!"];

}

另外荆萤,

NSMutableURLRequest是NSURLRequest的子類(lèi)镊靴,常用方法有

設(shè)置請(qǐng)求超時(shí)等待時(shí)間(超過(guò)這個(gè)時(shí)間就算超時(shí)铣卡,請(qǐng)求失敗)-(void)setTimeoutInterval:(NSTimeInterval)seconds;

設(shè)置請(qǐng)求方法(比如GET和POST)-(void)setHTTPMethod:(NSString*)method;

設(shè)置請(qǐng)求體-(void)setHTTPBody:(NSData*)data;

設(shè)置請(qǐng)求頭-(void)setValue:(NSString*)value forHTTPHeaderField:(NSString*)field;

使用NSURLConnection請(qǐng)求HTTPS(SSL)接口

//使用NSURLConnection連接HTTPS站點(diǎn)偏竟,需要處理SSL認(rèn)證煮落,NSURLConnectionDelegate中定義了一些方法來(lái)處理認(rèn)證

//–connection:canAuthenticateAgainstProtectionSpace:

//–connection:didReceiveAuthenticationChallenge:

//一.NSURLConnection中處理SSL

-(BOOL)connection:(NSURLConnection*)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace*)protectionSpace{

return[protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];

}

//如果接受任何證書(shū)

-(void)connection:(NSURLConnection*)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge{

[challenge.sender useCredential:[NSURLCredentialcredentialForTrust:challenge.protectionSpace.serverTrust]forAuthenticationChallenge:challenge];

}

//如果使用證書(shū)驗(yàn)證

-(void)connection:(NSURLConnection*)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge*)challenge

{

staticCFArrayRefcerts;

if(!certs){

NSData*certData=[NSDatadataWithContentsOfFile:[[NSBundlemainBundle]pathForResource:@"srca"ofType:@"cer"]];

SecCertificateRefrootcert=SecCertificateCreateWithData(kCFAllocatorDefault,CFBridgingRetain(certData));

constvoid*array[1]={rootcert};

certs=CFArrayCreate(NULL,array,1,&kCFTypeArrayCallBacks);

CFRelease(rootcert);// for completeness, really does not matter

}

SecTrustReftrust=[[challenge protectionSpace]serverTrust];

interr;

SecTrustResultTypetrustResult=0;

err=SecTrustSetAnchorCertificates(trust,certs);

if(err==noErr){

err=SecTrustEvaluate(trust,&trustResult);

}

CFRelease(trust);

BOOL trusted=(err==noErr)&&((trustResult==kSecTrustResultProceed)||(trustResult==kSecTrustResultConfirm)||(trustResult==kSecTrustResultUnspecified));

if(trusted){

[challenge.sender useCredential:[NSURLCredentialcredentialForTrust:challenge.protectionSpace.serverTrust]forAuthenticationChallenge:challenge];

}else{

[challenge.sender cancelAuthenticationChallenge:challenge];

}

}

AFNetworking:

AFNetworking下載地址:https://github.com/AFNetworking/AFNetworking

AFNetworking框架中處理SSL

使用AFURLConnectionOperation類(lèi)的下面兩個(gè)方法,分別將上述代碼以block方式傳入即可踊谋。

–setAuthenticationAgainstProtectionSpaceBlock:

–setAuthenticationChallengeBlock:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蝉仇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子殖蚕,更是在濱河造成了極大的恐慌轿衔,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睦疫,死亡現(xiàn)場(chǎng)離奇詭異害驹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蛤育,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)宛官,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瓦糕,你說(shuō)我怎么就攤上這事底洗。” “怎么了刻坊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵枷恕,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谭胚,道長(zhǎng)徐块,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任灾而,我火速辦了婚禮胡控,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘旁趟。我一直安慰自己昼激,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布锡搜。 她就那樣靜靜地躺著橙困,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耕餐。 梳的紋絲不亂的頭發(fā)上凡傅,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音肠缔,去河邊找鬼夏跷。 笑死哼转,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的槽华。 我是一名探鬼主播壹蔓,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼猫态!你這毒婦竟也來(lái)了佣蓉?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤懂鸵,失蹤者是張志新(化名)和其女友劉穎偏螺,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體匆光,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡套像,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了终息。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夺巩。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖周崭,靈堂內(nèi)的尸體忽然破棺而出柳譬,到底是詐尸還是另有隱情,我是刑警寧澤续镇,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布美澳,位于F島的核電站,受9級(jí)特大地震影響摸航,放射性物質(zhì)發(fā)生泄漏制跟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一酱虎、第九天 我趴在偏房一處隱蔽的房頂上張望雨膨。 院中可真熱鬧,春花似錦读串、人聲如沸聊记。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)排监。三九已至,卻和暖如春杰捂,著一層夾襖步出監(jiān)牢的瞬間社露,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工琼娘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峭弟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓脱拼,卻偏偏與公主長(zhǎng)得像瞒瘸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熄浓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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