OC语言中在github下载第一,很好用的框架
- AFHTTPRequestOperationManager是包装了NSURLConnection「已经过时淘汰」,所以了解就好不需要学习
- AFHTTPSessionManager「包装NSURLSession」,重点学习
一、AFNetWorking的HTTP请求
- GET和POST请求
- 注意:POST请求就是把GET换成POST就可以了
- (void)get{
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
NSDictionary *params = @{
@"username" : @"520it",
@"pwd" : @"520it"
};
[mgr GET:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"请求成功---%@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"请求失败---%@", error);
}];
}
二、AFNetWorking文件上传
- 文件上传是需要设置请求头和请求体的,这两样设置相当繁琐和没有必要。于是 AFNetWorking把它封装起来
- 请求头
- 告诉我是特殊请求,是文件上传请求
- 文件类型MIMEType ,可以百度查找对照表
- 运行中查找MIMEType ,可以通过发送请求获得request.MIMEType
- 请求体
- 文件参数
- 非文件参数(普通参数
方法一
- 方法一:我们是需要传入,Data,name, fileName ,mimeType就可以了
- 方法二:同理
- 方法三:只需要传入filename、mimeType,其他的参数已经给我们封装好
- (void)upload
{
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
[mgr POST:@"http://120.25.226.186:32812/upload" parameters:@{@"username" : @"123"}
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
// 在这个block中设置需要上传的文件
// NSData *data = [NSData dataWithContentsOfFile:@"/Users/xiaomage/Desktop/placeholder.png"];
//方法一
// [formData appendPartWithFileData:data name:@"file" fileName:@"test.png" mimeType:@"image/png"];
//方法二:自动给封装filename、mimeType
// [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/placeholder.png"] name:@"file" fileName:@"xxx.png" mimeType:@"image/png" error:nil];
//方法三:自动给封装filename、mimeType
[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/placeholder.png"] name:@"file" error:nil];
} success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"-------%@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
}];
}
方法二
- (void)upload2
{
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];
//上传服务器的地址
NSString *urlString = @"http://120.25.226.186:32812/upload";
//配置上传请求
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
NSURL *url = [NSURL fileURLWithPath:@"/Users/jeffrey/Desktop/325120-9212ca74fa78390d.png"];
[formData appendPartWithFileURL:url name:@"file" error:nil];
} error:nil];
//创建上传任务
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"%@ %@", response, responseObject);
}
}];
//开启上传
[uploadTask resume];
}
三、AFNetWorking文件下载
- 由于封装没有多大改变,所以文件下载一般我习惯用苹果自带的NSURLSession
- (void)download
{
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:config];
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_01.mp4"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
NSLog(@"File downloaded to: %@", filePath);
NSLog(@"File downloaded toresponse: %@", response);
}];
[downloadTask resume];
}
如何设置解析服务器返回数据
返回格式
AFHTTPResponseSerializer---> 二进制格式
AFJSONResponseSerializer---> JSON
AFXMLParserResponseSerializer---> XML,只能返回XMLParser,还需要自己通过代理方法解析
AFXMLDocumentResponseSerializer ---> (Mac OS X)
AFPropertyListResponseSerializer ---> PList
AFImageResponseSerializer ---> Image
AFCompoundResponseSerializer ---> 组合
请求格式
AFHTTPRequsetSerializer
AFJSONRequsetSerializer
AFPropertyRequsetSerializer