最近一直很忙也沒有時間寫博客,今天正好有點空閑時間,所以就對 AFNetworking 做了一些簡單的總結,特地記錄下來,以便遇到的朋友們看看?。?!
先說下這篇文章的大概內容,以便朋友們能夠快速找到自己需要的。這篇文章主要介紹了三種網絡請求的渠道,第一種是通過蘋果自帶的 NSURLSession 請求網絡;第二種是通過 AFNetworking2.x 請求網絡;最后一種是通過 AFNetworking3.0 請求網絡。下邊是這三種網絡請求渠道的 demo.
一、蘋果自帶的請求網絡方法:
這里介紹了三種,GET 請求、POST 請求、代理方式請求。
1.GET 請求:
// 獲得 NSURLSession 對象
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:nil delegateQueue:[NSOperationQueue mainQueue]];
// 創建任務
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@" "]] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"data ~~~ %@ ~~~ response ~~~ %@ ~~~ error~~~ %@", data, response , error);
}];
// 啟動任務
[dataTask resume];
2.POST 請求:
// 獲得NSURLSession對象
NSURLSession *session = [NSURLSession sharedSession];
// 創建請求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@" "]];
// 設置請求方法
request.HTTPMethod = @"POST";
// 設置請求體
request.HTTPBody = [@" " dataUsingEncoding:NSUTF8StringEncoding];
// 創建任務
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSLog(@"data ~~~ %@ ~~~ response ~~~ %@ ~~~ error~~~ %@", data, response , error);
}];
// 啟動任務
[task resume];
3.代理:NSURLSessionDataDelegate
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@" "]];
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
// 如果創建task時,有block,代理會失效
NSURLSessionDataTask *task = [session dataTaskWithRequest:request];
[task resume];
}
#pragma mark - NSURLSessionDataDelegate
#pragma mark - 接收到響應頭調用的協議方法
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
NSHTTPURLResponse *httpRes = (NSHTTPURLResponse *)response;
NSLog(@"%@",httpRes.allHeaderFields);
//通過設置 completionHandler, Block 可以設置后面的響應體中的數據是否繼續發送,默認是不發送
completionHandler(NSURLSessionResponseAllow);
}
#pragma mark - 數據請求完成后,調用的協議方法,data是響應體中的數據
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data {
NSLog(@"%@",data);
}
#pragma mark - 不管請求成功還是失敗,最終都會調用此方法
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
if (error) {
NSLog(@"請求失敗");
} else {
NSLog(@"請求成功");
}
}
二、AFNetworking2.x
1.GET 請求
AFHTTPRequestOperationManager *operationManager = [AFHTTPRequestOperationManager manager];
[operationManager GET:@" " parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"請求成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"請求失敗");
}];
2.POST 請求
AFHTTPRequestOperationManager *operationManager = [AFHTTPRequestOperationManager manager];
[operationManager POST:@" " parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"請求成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"請求失敗");
}];
三、AFNetworking3.0
1.GET 請求
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
// 解析服務器返回的JSON數據
// [AFJSONResponseSerializer serializer];
// 解析服務器返回的XML數據
// [AFXMLParserResponseSerializer serializer];
// 參數1: 請求的網址
// 參數2: 參數
// 參數3: 當前的進度
// 參數4: 請求成功
// 參數5: 請求失敗
[sessionManager GET:@" " parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
NSLog(@"進度");
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"請求成功");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"請求失敗");
}];
2.POST 請求
// 創建管理者對象
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
// 設置請求參數
NSString *urlStr = @" ";
// 需要設置 body 體
NSDictionary *dic = @{@" " : @" ",@" " : @" "};
[sessionManager POST:urlStr parameters:dic progress:^(NSProgress * _Nonnull downloadProgress) {
NSLog(@"進度");
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"請求成功");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"請求失敗");
}];
上面的一些代碼都是基礎性代碼,因此也沒怎么做注釋,如果有疑問的話可以私信交流...另外代碼有什么問題的話也希望大家能夠指出!謝謝大家!