AFNetworking

下载AFNetworking开源代码

点击链接:AFNetworking

Architecture


NSURLConnection

  • AFURLConnectioinOperatioin
  • AFHTTPRequestOperation
  • AFHTTPRequestOperationManager

NSURLSession(iOS 7 /Mac OS 10.9)

  • AFURLSessionManager
  • AFHTTPSessionManager

Serialization

  • AFURLRequestSerialization

    • AFHTTPRequestSerialization

    • AFJSONRequestSerialization

    • AFPropertyListRequestSerialization

  • AFURLResponseSerialization

    • AFHTTPResponseSerialization

    • AFJSONResponseSerialization

    • AFXMLParserResponseSerialization

    • AFXMLDocumentResponseSerialization (MAC OS X)

    • AFPropertyListResponseSerialization

    • AFImageResponseSerializer

    • AFCompoundResponseSerializer

Additional Functionality

  • AFSecurityPolicy
  • AFNetworkReachabilityManager

Usage

#define kBaseURL @”http://afnetworking.sinaapp.com


1
2
3
requestSerializer 默认是 [AFHTTPRequestSerializer serializer];
responseSerializer 默认是 [AFJSONResponseSerializer serializer];

AFHTTPRequestOperation

NSString *urlStr = [kBaseURL stringByAppendingPathComponent:@"request_get.json"];
NSDictionary *parameters = @{@"foo":@"bar"};
NSURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:urlStr parameters:parameters error:nil];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc]initWithRequest:request];
op.responseSerializer = [AFJSONResponseSerializer serializer];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"response object : %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error : %@",error);
}];
[[NSOperationQueue mainQueue] addOperation:op];
-----------------------------------------------------    
结果:
    Success:
    response object : {
        data =     {
            foo = bar;
        };
        success = 1;
    }
    Error:{
            "errors":"Parameter error!",
            "success":false
    }
-----------------------------------------------------    

AFHTTPRequestOperationManager

GET Request

NSString *urlStr = [kBaseURL stringByAppendingPathComponent:@"request_get.json"];
NSDictionary *parameters = @{@"foo":@"bar"};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:urlStr parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"response object : %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error : %@",error);
}];
-----------------------------------------------------    
结果:
    Success: 
    response object : {
        data =     {
            foo = bar;
        };
        success = 1;
    }
    Error:{
            "errors":"Parameter error!",
            "success":false
    }
-----------------------------------------------------        

POST URL-Form-Request

NSString *httpUrlStr = [kBaseURL stringByAppendingPathComponent:@"request_post_body_http.json"];
NSDictionary *parameters = @{@"foo":@"bar"};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:httpUrlStr parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"response object : %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error : %@",error);
}];

NSString *jsonUrlStr = [kBaseURL stringByAppendingPathComponent:@"request_post_body_json.json"];
[manager POST:jsonUrlStr parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Response object : %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error : %@",error);
}];
-----------------------------------------------------    
结果:
    Success: 
    response object : {
        data =     {
            foo = bar;
        };
        success = 1;
    }
    Error:{
            "errors":"Parameter error!",
            "success":false
    }
-----------------------------------------------------

POST Multi-Part-Request

NSString *urlStr = [kBaseURL stringByAppendingPathComponent:@"upload2server.json"];
NSDictionary *parameters = @{@"foo":@"bar"};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:urlStr parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"b_Aquarius" withExtension:@"jpg"];
    [formData appendPartWithFileURL:fileURL name:@"image" fileName:@"constellation.jpg" mimeType:@"image/jpeg" error:nil];
    fileURL = [[NSBundle mainBundle] URLForResource:@"b_Aries" withExtension:@"png"];
    [formData appendPartWithFileURL:fileURL name:@"image" fileName:@"constellation.png" mimeType:@"image/png" error:nil];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Response object : %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error : %@",error);
}];
-----------------------------------------------------
结果:
    Success: 
    Response object : {
        data =     (
                    {
                name = "constellation.jpg";
                url = "http://afnetworking-userdomain.stor.sinaapp.com/constellation.jpg";
            },
                    {
                name = "constellation.png";
                url = "http://afnetworking-userdomain.stor.sinaapp.com/constellation.png";
            }
        );
        success = 1;
    }
-----------------------------------------------------

AFURLSessionManager

Creating a Download Task

/#define kDownloadUrl @”http://music.baidu.com/data/music/file?link=http://yinyueshiting.baidu.com/data2/music/346495/3464861417179661128.mp3?xcode=91aea20a92711d3d83f3f76a0952eb4b63b77ba183a87289&song_id=346486kDownloadUrl 是下载链接

NSURL *url = [NSURL URLWithString:kDownloadUrl];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFURLSessionManager *manager = [[AFURLSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSProgress *progress = nil;
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    NSString *filePath = @"/Users/qingyun/Desktop";
    NSString *newFielPath = [filePath stringByAppendingPathComponent:response.suggestedFilename];
    NSLog(@"name : %@",response.suggestedFilename);
    return [NSURL fileURLWithPath:newFielPath];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
    if (error) {
        NSLog(@"Error : %@",error);
    }else{
        NSLog(@"File path : %@",filePath);
    }
}];
[downloadTask resume];
-----------------------------------------------------
结果:
Success: File path : file:///Users/qingyun/Desktop/Only%20Love.mp3
-----------------------------------------------------

Creation a Upload Task

    NSString *urlStr = [kBaseURL stringByAppendingPathComponent:@"upload2server.json"];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
AFURLSessionManager *manager = [[AFURLSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSProgress *progress = nil;
NSString *filePath = @"file:///Users/qingyun/Desktop/xml&json.pdf";
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:filePath] progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error : %@",error);
    }else{
        NSLog(@"Response objecct : %@",responseObject);
    }
}];
[uploadTask resume];
-----------------------------------------------------    
结果:
  Success:Response objecct : {
success = 1;
}
-----------------------------------------------------

Creation a Upload Task For Multi-Part Request, With Progress

NSString *urlStr = [kBaseURL stringByAppendingPathComponent:@"upload2server.json"];
NSURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:urlStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"b_Cancer" withExtension:@"png"];
    [formData appendPartWithFileURL:fileURL name:@"image" fileName:@"Cancer.png" mimeType:@"image/png" error:nil];

    fileURL = [NSURL URLWithString:@"file://Users/qingyun/Desktop/xml&json.pdf"];
    [formData appendPartWithFileURL:fileURL name:@"image" error:nil];
} error:nil];
NSProgress *progress = nil;
AFURLSessionManager *manager = [[AFURLSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error : %@",error);
    }else{
        NSLog(@"Response objecct : %@",responseObject);
    }
}];
[uploadTask resume];
-----------------------------------------------------    
结果:
Success:Response objecct : {
        data =     (
                    {
                name = "Cancer.png";
                url = "http://afnetworking-userdomain.stor.sinaapp.com/Cancer.png";
            }
        );
        success = 1;
    }
-----------------------------------------------------

Creation a Data Task

NSURL *url = [NSURL URLWithString:[kBaseURL stringByAppendingPathComponent:@"response.json"]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFURLSessionManager *manager = [[AFURLSessionManager alloc]initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error : %@",error);
    }else{
        NSLog(@"response object : %@",responseObject);
    }
}];
[dataTask resume];
-----------------------------------------------------
结果:
Success: response object : {
data = "This is a json data.";
success = 1;
}
-----------------------------------------------------

AFHTTPSessionManager

GET Request

NSString *urlStr = [kBaseURL stringByAppendingPathComponent:@"request_get.json"];
NSDictionary *parameters = @{@"foo":@"bar"};
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSURLSessionDataTask *dataTask = [manager GET:urlStr parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
    NSLog(@"response object : %@",responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
    NSLog(@"Error : %@",error);
}];
[dataTask resume];
----------------------------------------------------
结果:
Success :response object : {
    data =     {
        foo = bar;
    };
    success = 1;
}
----------------------------------------------------

POSTRequest

NSString *urlStr = [kBaseURL stringByAppendingPathComponent:@"request_post_body_http.json"];
NSDictionary *parameters = @{@"foo":@"bar"};
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSURLSessionDataTask *dataTask = [manager POST:urlStr parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
    NSLog(@"response object : %@",responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
    NSLog(@"Error : %@",error);
}];
[dataTask resume];
-----------------------------------------------------
结果:
Success:response object : {
    data =     {
        foo = bar;
    };
    success = 1;
}
-----------------------------------------------------

HEADRequest

NSString *urlStr = [kBaseURL stringByAppendingPathComponent:@"request_post_body_http.json"];
NSDictionary *parameters = @{@"foo":@"bar"};
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSURLSessionDataTask *dataTask = [manager HEAD:urlStr parameters:parameters success:^(NSURLSessionDataTask *task) {
    NSLog(@"Task : %@",task);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
    NSLog(@"Task : %@ Error : %@",task,error);
}];
[dataTask resume];
----------------------------------------------------
结果:
Success: Task : <__NSCFLocalDataTask: 0x8d77b10> { completed }
----------------------------------------------------

AFNetworkReachabilityManager

/*
 *AFNetworkReachabilityStatusNotReachable     = 0,
 *AFNetworkReachabilityStatusReachableViaWWAN = 1,
 *AFNetworkReachabilityStatusReachableViaWiFi = 2
 */
NSArray *array = @[@"不可达",@"2G/3G/4G",@"wi-fi"];

[AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[self.manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"网络检测" message:[NSString stringWithFormat:@"%@",array[status]] delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
    [alert show];

}];

-----
[manager startMonitoring];
[manager stopMonitoring];