iOS学習ノート-----AFNetworkingの使用

12193 ワード

1.GET要求
NSString *urlString = @"http://piao.163.com/m/cinema/list.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000";
    //------------------------  AF Get  ------------------------
    //  manager
    AFHTTPSessionManager *manger = [AFHTTPSessionManager manager];

    //            
    //      
    //AFHTTPRequestSerializer    key1=value1&key2=value2           
    //AFJSONRequestSerializer   Json      
    //[AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted];
    manger.requestSerializer = [AFHTTPRequestSerializer serializer];

    //      
    //AFHTTPResponseSerializer       
    //AFJSONResponseSerializer     Json      
    //AFXMLParserResponseSerializer   XML  
    manger.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingMutableLeaves];

    //    
    [manger GET:urlString
     parameters:nil
       progress:^(NSProgress * _Nonnull downloadProgress) {
           NSLog(@"%lli/%lli", downloadProgress.completedUnitCount, downloadProgress.totalUnitCount);
       }
        success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"    ");
            NSLog(@"responseObject%@", responseObject);
        }
        failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"    ");
        }];

2.POSTリクエスト
(1)一般POST要求
//  manager
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    NSString *urlString = @"http://piao.163.com/m/cinema/schedule.html?app_id=1&mobileType=iPhone&ver=2.6&channel=appstore&deviceId=9E89CB6D-A62F-438C-8010-19278D46A8A6&apiVer=6&city=110000";
    NSDictionary *parameters = @{@"cinema_id" : @"1533"};


    //  POST  
    [manager POST:urlString
       parameters:parameters
         progress:nil
          success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
              NSLog(@"    :%@", responseObject);
          }
          failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
              NSLog(@"    ");
          }];

(2)微博インターフェース、multiipad/form-data POSTファイルアップロード
  //url token
    NSString *urlString = @"https://upload.api.weibo.com/2/statuses/upload.json";
    //       
    NSString *token = @"2.00hd363CtKpsnBedca9b3f35tBYiP";


    //      
    NSDictionary *dic = @{@"access_token" : token, @"status" : @"    !  "};

    //  manager   POST  
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    [manager POST:urlString
       parameters:dic
constructingBodyWithBlock:^(id  _Nonnull formData) {
    //         
    //    
    UIImage *image = [UIImage imageNamed:@"1.jpg"];
    NSData *data = UIImageJPEGRepresentation(image, 0.7);
    //         fromdata 
    [formData appendPartWithFileData:data name:@"pic" fileName:@"1.jpg" mimeType:@"image/jpeg"];
}
         progress:^(NSProgress * _Nonnull downloadProgress) {
             NSLog(@"%lli/%lli", downloadProgress.completedUnitCount, downloadProgress.totalUnitCount);
         }
          success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
              NSLog(@"    ");
          }
          failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
              NSLog(@"    ");
          }];
3.ダウンロードタスク

    //    
    NSString *urlString = @"http://218.76.27.57:8080/chinaschool_rs02/135275/153903/160861/160867/1370744550357.mp3";

    //  manager
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    //      
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlString]];


    //      
    NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        NSLog(@"%lli/%lli", downloadProgress.completedUnitCount, downloadProgress.totalUnitCount);
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        //      ,        
        NSLog(@"   :%li", ((NSHTTPURLResponse *)response).statusCode);
        //targetPath         
        //           
        NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/   .mp3"];
        NSLog(@"%@", filePath);
        //             ,          
        return [NSURL fileURLWithPath:filePath];

    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        NSLog(@"    ");
    }];

    [downloadTask resume];

    //    ,       
    [_progressView setProgressWithDownloadProgressOfTask:downloadTask animated:YES];

4.アップロードタスクmultiipad/form-data POSTファイルアップロード

    NSString *urlString = @"https://api.weibo.com/2/statuses/upload.json";
    NSString *token = @"2.00hd363CtKpsnBedca9b3f35tBYiP";
    //          
    UIImage *image = _imageView.image;
    NSString *text = _textField.text;

    if (image == nil || text.length == 0) {
        return;
    }
    //      
    NSDictionary *dic = @{@"access_token" : token,
                          @"status" : text};

    //       
    AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
    //      
    NSMutableURLRequest *request = [serializer multipartFormRequestWithMethod:@"POST" URLString:urlString parameters:dic constructingBodyWithBlock:^(id  _Nonnull formData) {

        //       
        NSData *imageData = UIImageJPEGRepresentation(image, 1);
        [formData appendPartWithFileData:imageData name:@"pic" fileName:@"image.png" mimeType:@"image/png"];

    } error:nil];

    //  manager
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    //      
    NSURLSessionUploadTask *uploadTask;
    uploadTask = [manager uploadTaskWithStreamedRequest:request progress:^(NSProgress * _Nonnull uploadProgress) {

        //           
//        [_progressView performSelectorOnMainThread:@selector(setProgress:) withObject:@(uploadProgress.fractionCompleted) waitUntilDone:YES];
        dispatch_async(dispatch_get_main_queue(), ^{
            //Update the progress view
            [_progressView setProgress:uploadProgress.fractionCompleted];
        });

    } completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {

        NSLog(@"    ,   :%li", ((NSHTTPURLResponse *)response).statusCode);
    }];

    [uploadTask resume];