iOS 網(wǎng)絡請求之ASIHttpRequest 封裝

因所在公司項目久遠,網(wǎng)絡請求一直用的是ASIHTTPRequest,一步一步寫起來太麻煩卷哩,故對其封裝下洽议,廢話不多說直接上代碼:

ASIHTTPRequest GitHub鏈接

demo地址

1.引入ASI指黎,本人使用CocoaPods三方庫管理工具

platform :ios, '7.0'

target 'ASINetworking' do

pod 'ASIHTTPRequest'

......

end

2. 先創(chuàng)建一個工具類

ASIHttpUtil.h

/**

*? 請求完成回調方法

*/

typedef void (^CompleteBlock)(id json, NSString *stringData);

typedef void (^FailedBlock)(NSError *error);

typedef void (^ProgressBlock)(float progress);

/**

*? GET請求芯砸,有參數(shù)

*

*? @param path 接口路徑,不能為空

*? @param paramsDic 請求的參數(shù)的字典并淋,參數(shù)可為nil, 例如:NSDictionary *params = @{@"key":@"value"}

*? @param completeBlock 請求完成塊寓搬,返回 id JSON, NSString *stringData;

*? @param failed 請求失敗塊,返回 NSError *error;

*/

+ (ASIHTTPRequest *)getRequestWithPath:(NSString *)path params:(NSDictionary *)paramsDic completed:(CompleteBlock)completeBlock failed:(FailedBlock)failed;

/**

*? POST請求县耽,有參數(shù)句喷;

*

*? @param path 接口路徑,不能為空兔毙;

*? @param paramsDic 請求的參數(shù)的字典唾琼,參數(shù)可為nil, 例如:NSDictionary *params = @{@"key":@"value"}

*? @param completeBlock 請求完成塊,返回 id JSON, NSString *stringData;

*? @param failed 請求失敗塊澎剥,返回 NSError *error;

*

*? @return 返回ASIHTTPRequest的指針锡溯,可用于 NSOperationQueue操作

*/

+ (ASIHTTPRequest *)postRequestWithPath:(NSString *)path params:(NSDictionary *)paramsDic completed:(CompleteBlock)completeBlock failed:(FailedBlock)failed;

ASIHttpUtil.m

#pragma mark GET請求

+ (ASIHTTPRequest *)getRequestWithPath:(NSString *)path params:(NSDictionary *)paramsDic completed:(CompleteBlock)completeBlock failed:(FailedBlock)failed{

NSString *urlString = [NSString stringWithFormat:@"%@",path];

urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlString];

__weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

request.requestMethod = @"GET";

for (NSString *key in sg_httpHeaders.allKeys) {

if (sg_httpHeaders[key] != nil) {

[request addRequestHeader:key value:sg_httpHeaders[key]];

}

}

[request setCompletionBlock:^{

NSError *errorForJSON = [NSError errorWithDomain:@"請求數(shù)據(jù)解析為json格式,發(fā)出錯誤" code:2014 userInfo:@{@"請求數(shù)據(jù)json解析錯誤": @"中文",@"serial the data to json error":@"English"}];

id jsonData = [NSJSONSerialization JSONObjectWithData:[request responseData] options:0 error:&errorForJSON];

completeBlock(jsonData,request.responseString);

}];

[request setFailedBlock:^{

failed([request error]);

}];

[request setNumberOfTimesToRetryOnTimeout:requestTimesTry];

[request setTimeOutSeconds:requestTimeLimited];

[request startAsynchronous];

return request;

}

#pragma mark POST請求

+ (ASIHTTPRequest *)postRequestWithPath:(NSString *)path params:(NSDictionary *)paramsDic completed:(CompleteBlock)completeBlock failed:(FailedBlock)failed{

NSString *urlString = [NSString stringWithFormat:@"%@",path];

urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlString];

__weak ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

request.requestMethod = @"POST";

for (NSString *key in sg_httpHeaders.allKeys) {

if (sg_httpHeaders[key] != nil) {

[request addRequestHeader:key value:sg_httpHeaders[key]];

}

}

[paramsDic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

[request setPostValue:obj forKey:key];

}];

[request setCompletionBlock:^{

NSError *errorForJSON = [NSError errorWithDomain:@"請求數(shù)據(jù)解析為json格式哑姚,發(fā)出錯誤" code:2014 userInfo:@{@"請求數(shù)據(jù)json解析錯誤": @"中文",@"serial the data to json error":@"English"}];

id jsonData = [NSJSONSerialization JSONObjectWithData:[request responseData] options:0 error:&errorForJSON];

completeBlock(jsonData, request.responseString);

}];

[request setFailedBlock:^{

failed([request error]);

}];

[request setNumberOfTimesToRetryOnTimeout:requestTimesTry];

[request setTimeOutSeconds:requestTimeLimited];

[request startAsynchronous];

return request;

}

本文只針對于GET請求方法和POST請求方法做了介紹祭饭,Demo中還詳細介紹了文件上傳及下載等方法的封裝,有需要的朋友可以下載查看叙量,希望對你有所幫助倡蝙。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绞佩,隨后出現(xiàn)的幾起案子寺鸥,更是在濱河造成了極大的恐慌,老刑警劉巖征炼,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件析既,死亡現(xiàn)場離奇詭異,居然都是意外死亡谆奥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門拂玻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酸些,“玉大人宰译,你說我怎么就攤上這事∑嵌” “怎么了沿侈?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長市栗。 經(jīng)常有香客問我缀拭,道長,這世上最難降的妖魔是什么填帽? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任蛛淋,我火速辦了婚禮,結果婚禮上篡腌,老公的妹妹穿的比我還像新娘褐荷。我一直安慰自己,他們只是感情好嘹悼,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布叛甫。 她就那樣靜靜地躺著,像睡著了一般杨伙。 火紅的嫁衣襯著肌膚如雪其监。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天限匣,我揣著相機與錄音抖苦,去河邊找鬼。 笑死膛腐,一個胖子當著我的面吹牛睛约,可吹牛的內容都是我干的。 我是一名探鬼主播哲身,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辩涝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了勘天?” 一聲冷哼從身側響起怔揩,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脯丝,沒想到半個月后商膊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡宠进,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年晕拆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片材蹬。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡实幕,死狀恐怖吝镣,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情昆庇,我是刑警寧澤末贾,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站整吆,受9級特大地震影響拱撵,放射性物質發(fā)生泄漏。R本人自食惡果不足惜表蝙,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一拴测、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勇哗,春花似錦昼扛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扰法,卻和暖如春蛹含,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背塞颁。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工浦箱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祠锣。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓酷窥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親伴网。 傳聞我的和親對象是個殘疾皇子蓬推,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容