AFNetworking 是 IOS 平台上最著名的第三方网络库。它基于 NSURLSession 构建,提供了更高层的网络请求封装,解决了 NSURLSession 有些繁琐的 API 问题,使网络编程更加简单易用。
AFNetworking 的主要特点:
- 简单友好的 API,隐藏 NSURLSession 的复杂性。
- 上传、下载的进度监控跟踪。
- 对 JSON 的解析支持。
- 支持通知机制。
- 简单易用的 SSL pinning 和天然的 IPv6 支持。
使用 AFNetworking 进行 GET 请求的示例代码:
objc
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"http://httpbin.org/get"
parameters:nil
progress:nil
success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"%@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Error: %@", error);
}];
使用 AFNetworking 上传图片的示例代码:
objc
NSURL *url = [NSURL URLWithString:@"http://httpbin.org/post"];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:url];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"];
NSURL *fileURL = [NSURL fileURLWithPath:filePath];
NSDictionary *parameters = @{@"name": @"AFNetworking"};
[manager POST:url.path parameters:parameters headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFileURL:fileURL name:@"file" fileName:@"test.png" mimeType:@"image/png" error:nil];
} progress:^(NSProgress * _Nonnull uploadProgress) {
// 上传进度
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"Success: %@", responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"Error: %@", error);
}];