iOS開發之 - AFNetworking - 網絡請求

最近一直很忙也沒有時間寫博客,今天正好有點空閑時間,所以就對 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(@"請求失敗");
    }];

上面的一些代碼都是基礎性代碼,因此也沒怎么做注釋,如果有疑問的話可以私信交流...另外代碼有什么問題的話也希望大家能夠指出!謝謝大家!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容