iOS網絡請求基礎


  這篇是關於網絡請求的,結合公司的實際情況編寫,如果有不同意見歡迎留言共同討論。

  iOS在9.0之后徹底放棄了NSURLConnection,現在已經改用了NSURLSession進行網絡請求。一般現在網絡請求也都是使用AFNetworking。下面就把我自己關於afn和系統的api使用寫下來。

  一.使用NSURLSession

  移動端的網絡請求主要是get請求和post請求, get和post請求步驟差不多,只不過post對於信息的傳送更安全,post請求會設置body而且會對body進行加密,保證傳輸的信息安全。

      NSString *urlString = BASE_PERSONAL_URL; // 設置請求網址
    NSURL *url = [NSURL URLWithString:urlString];
      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 創建請求

    // 參數拼接
      NSDictionary *bodyDic = @{@"password": md5Password, @"os": @"2", @"version": strSysVersion, @"models": phoneModel};
      NSArray *body = @[bodyDic];
      NSDictionary *parameter = @{@"head":head, @"body":body};
      request.HTTPMethod = @"Post"; // 設置請求方式
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; // 設置請求頭,返回類型
        NSLog(@"parameter ==== %@", parameter);
        
        NSData *data = [NSJSONSerialization dataWithJSONObject:parameter options:NSJSONWritingPrettyPrinted error:nil];
        // 因為需要對body體進行加密所以先把data轉化成字符串,如果不加密可略過次步
        NSString *bodyString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSData *bodyData = [[Base getHTTPBodyString:bodyString] dataUsingEncoding:NSUTF8StringEncoding]; // 對body體進行加密
    request.HTTPBody = bodyData; // 設置body體
    // 進行網絡請求
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (!error) {
            
            // 因為回傳的信息也進行了加密所以也需要對返回的數據進行解密
            // 將data數據轉化成字符串進行解密
            NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSString *resault = [Base getHttpString:responseString];
            // 將解密后的字符串轉成data
            NSData *resaultData = [resault dataUsingEncoding:NSUTF8StringEncoding];
            // 使用json解析
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:resaultData options:NSJSONReadingMutableLeaves error:nil];
      
        } else {
            NSLog(@"%@", error);
        }
    }];

  // 網絡請求開始
    [dataTask resume];

 請求方面基本是這樣的,至於加密的方式是公司內部協商確定的

 二 使用AFN

      AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
    sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
    sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
    
    [sessionManager POST:urlString parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
    
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        
        NSLog(@"response === %@", responseObject);

        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"data ====---0=-=0=0-=0=0-=0= %@", error);

    }];
    一般公司會根據實際情況對afn進行二次封裝,而不會直接調用afn的接口,比如說加密等
 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com