因所在公司項目久遠,網(wǎng)絡請求一直用的是ASIHTTPRequest,一步一步寫起來太麻煩卷哩,故對其封裝下洽议,廢話不多說直接上代碼:
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中還詳細介紹了文件上傳及下載等方法的封裝,有需要的朋友可以下載查看叙量,希望對你有所幫助倡蝙。