iOS应用开发中AFNetworking库的常用HTTP操作方法小结
AFNetworking库是Objective-C语言写成的用于处理HTTP的第三方库,在GitHub上开源并且一直在被更新和维护,下面就一起来看一下iOS应用开发中AFNetworking库的常用HTTP操作方法小结
准备
首先,你需要将AFNetworking框架包含到工程中。如果你还没有AFNetworking的话,在这里下载最新的版本:
https://github.com/AFNetworking/AFNetworking
当你解压出下载的文件后,你将看到其中有一个AFNetworking子文件夹,里面全是.h和.m文件,如下高亮显示的:
将AFNetworking拖拽到Xcode工程中.
当出现了添加文件的选项时,确保勾选上Copyitemsintodestinationgroup''sfolder(ifneeded)和Creategroupsforanyaddedfolders.
将AFNetworking添加到预编译头文件,意味着这个框架会被自动的添加到工程的所有源代码文件中。
常用方法介绍
方法一:GET请求
复制代码代码如下:
AFHTTPRequestOperationManagermanager=[AFHTTPRequestOperationManagermanager];
[managerGET:@"example.com/resources.json"parameters:nilsuccess:^(AFHTTPRequestOperationoperation,idresponseObject){
NSLog(@"JSON:%@",responseObject);
}failure:^(AFHTTPRequestOperationoperation,NSErrorerror){
NSLog(@"Error:%@",error);
}];
方法二:POST请求
复制代码代码如下:
AFHTTPRequestOperationManagermanager=[AFHTTPRequestOperationManagermanager];
NSDictionaryparameters=@{@"foo":@"bar"};
[managerPOST:@"example.com/resources.json"parameters:parameterssuccess:^(AFHTTPRequestOperationoperation,idresponseObject){
NSLog(@"JSON:%@",responseObject);
}failure:^(AFHTTPRequestOperationoperation,NSErrorerror){
NSLog(@"Error:%@",error);
}];
方法三:POSTMulti-PartRequest
复制代码代码如下:
AFHTTPRequestOperationManagermanager=[AFHTTPRequestOperationManagermanager];
NSDictionaryparameters=@{@"foo":@"bar"};
NSURLfilePath=[NSURLfileURLWithPath:@"file://path/to/image.png"];
[managerPOST:@"example.com/resources.json"parameters:parametersconstructingBodyWithBlock:^(idformData){
[formDataappendPartWithFileURL:filePathname:@"image"error:nil];
}success:^(AFHTTPRequestOperationoperation,idresponseObject){
NSLog(@"Success:%@",responseObject);
}failure:^(AFHTTPRequestOperationoperation,NSErrorerror){
NSLog(@"Error:%@",error);
}];
方法四:创建一个下载文件任务
复制代码代码如下:
NSURLSessionConfigurationconfiguration=[NSURLSessionConfigurationdefaultSessionConfiguration];
AFURLSessionManagermanager=[[AFURLSessionManageralloc]initWithSessionConfiguration:configuration];
NSURLURL=[NSURLURLWithString:@"example.com/download.zip"];
NSURLRequestrequest=[NSURLRequestrequestWithURL:URL];
NSURLSessionDownloadTaskdownloadTask=[managerdownloadTaskWithRequest:requestprogress:nildestination:^NSURL(NSURLtargetPath,NSURLResponseresponse){
NSURLdocumentsDirectoryURL=[[NSFileManagerdefaultManager]URLForDirectory:NSDocumentDirectoryinDomain:NSUserDomainMaskappropriateForURL:nilcreate:NOerror:nil];
return[documentsDirectoryURLURLByAppendingPathComponent:[responsesuggestedFilename]];
}completionHandler:^(NSURLResponseresponse,NSURLfilePath,NSErrorerror){
NSLog(@"Filedownloadedto:%@",filePath);
}];
[downloadTaskresume];
方法五:创建一个上传文件任务
复制代码代码如下:
NSURLSessionConfigurationconfiguration=[NSURLSessionConfigurationdefaultSessionConfiguration];
AFURLSessionManagermanager=[[AFURLSessionManageralloc]initWithSessionConfiguration:configuration];
NSURLURL=[NSURLURLWithString:@"example.com/upload"];
NSURLRequestrequest=[NSURLRequestrequestWithURL:URL];
NSURLfilePath=[NSURLfileURLWithPath:@"file://path/to/image.png"];
NSURLSessionUploadTaskuploadTask=[manageruploadTaskWithRequest:requestfromFile:filePathprogress:nilcompletionHandler:^(NSURLResponseresponse,idresponseObject,NSErrorerror){
if(error){
NSLog(@"Error:%@",error);
}else{
NSLog(@"Success:%@%@",response,responseObject);
}
}];
[uploadTaskresume];
方法六:创建一个上传文件任务并显示进度
复制代码代码如下:
NSMutableURLRequestrequest=[[AFHTTPRequestSerializerserializer]multipartFormRequestWithMethod:@"POST"URLString:@"example.com/upload"parameters:nilconstructingBodyWithBlock:^(idformData){
[formDataappendPartWithFileURL:[NSURLfileURLWithPath:@"file://path/to/image.jpg"]name:@"file"fileName:@"filename.jpg"mimeType:@"image/jpeg"error:nil];
}error:nil];
AFURLSessionManagermanager=[[AFURLSessionManageralloc]initWithSessionConfiguration:[NSURLSessionConfigurationdefaultSessionConfiguration]];
NSProgressprogress=nil;
NSURLSessionUploadTaskuploadTask=[manageruploadTaskWithStreamedRequest:requestprogress:&progresscompletionHandler:^(NSURLResponseresponse,idresponseObject,NSErrorerror){
if(error){
NSLog(@"Error:%@",error);
}else{
NSLog(@"%@%@",response,responseObject);
}
}];
[uploadTaskresume];
方法七:创建一个上传数据data任务
复制代码代码如下:
NSURLSessionConfigurationconfiguration=[NSURLSessionConfigurationdefaultSessionConfiguration];
AFURLSessionManagermanager=[[AFURLSessionManageralloc]initWithSessionConfiguration:configuration];
NSURLURL=[NSURLURLWithString:@"example.com/upload"];
NSURLRequestrequest=[NSURLRequestrequestWithURL:URL];
NSURLSessionDataTaskdataTask=[managerdataTaskWithRequest:requestcompletionHandler:^(NSURLResponseresponse,idresponseObject,NSErrorerror){
if(error){
NSLog(@"Error:%@",error);
}else{
NSLog(@"%@%@",response,responseObject);
}
}];
[dataTaskresume];
方法八:获取网络状态
复制代码代码如下:
[[AFNetworkReachabilityManagersharedManager]setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatusstatus){
NSLog(@"Reachability:%@",AFStringFromNetworkReachabilitywww.hunanwang.netStatus(status));
}];
方法九:HTTPManagerReachability
复制代码代码如下:
NSURLbaseURL=[NSURLURLWithString:@"examplewww.visa158.com/"];
AFHTTPRequestOperationManagermanager=[[AFHTTPRequestOperationManageralloc]initWithBaseURL:baseURL];
NSOperationQueueoperationQueue=manager.operationQueue;
[manager.reachabilityManagersetReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatusstatus){
switch(status){
caseAFNetworkReachabilityStatusReachableViaWWAN:
caseAFNetworkReachabilityStatusReachableViaWiFi:
[operationQueuesetSuspended:NO];
break;
caseAFNetworkReachabilityStatusNotReachable:
default:
[operationQueuesetSuspended:YES];
break;
}
}];
[manager.reachabilityManagerstartMonitoring];
方法十:AFHTTPRequestOperation的GET请求
复制代码代码如下:
NSURLURL=[NSURLURLWithString:@"example.com/resources/123.json"];
NSURLRequestrequest=[NSURLRequestrequestWithURL:URL];
AFHTTPRequestOperationop=[[AFHTTPRequestOperationalloc]initWithRequest:request];
op.responseSerializer=[AFJSONResponseSerializerserializer];
[opsetCompletionBlockWithSuccess:^(AFHTTPRequestOperationoperation,idresponseObject){
NSLog(@"JSON:%@",responseObject);
}failure:^(AFHTTPRequestOperationoperation,NSErrorerror){
NSLog(@"Error:%@",error);
}];
[[NSOperationQueuemainQueue]addOperation:op];
方法十一:BatchofOperations
复制代码代码如下:
NSMutableArraymutableOperations=[NSMutableArrayarray];
for(NSURLfileURLinfilesToUpload){
NSURLRequestrequest=[[AFHTTPRequestSerializerserializer]multipartFormRequestWithMethod:@"POST"URLString:@"example.com/upload"parameters:nilconstructingBodyWithBlock:^(idformData){
[formDataappendPartWithFileURL:fileURLname:@"images[]"error:nil];
}];
AFHTTPRequestOperationoperation=[[AFHTTPRequestOperationalloc]initWithRequest:request];
[mutableOperationsaddObject:operation];
}
NSArrayoperations=[AFURLConnectionOperationbatchOfRequestOperations:@[...]progressBlock:^(NSUIntegernumberOfFinishedOperations,NSUIntegertotalNumberOfOperations){
NSLog(@"%luof%lucomplete",numberOfFinishedOperations,totalNumberOfOperations);
}completionBlock:^(NSArrayoperations){
NSLog(@"Alloperationsinbatchcomplete");
}];
[[NSOperationQueuemainQueue]addOperations:operationswaitUntilFinished:NO];
方法十二:获取请求的一些信息(我也没有用过,不太常用)
复制代码代码如下:
RequestSerialization
RequestserializerscreaterequestsfromURLstrings,encodingparametersaseitheraquerystringorHTTPbody.
NSStringURLString=@"example.com";
NSDictionaryparameters=@{@"foo":@"bar",@"baz":@[@1,@2,@3]};
QueryStringParameterEncoding
[[AFHTTPRequestSerializerserializer]requestWithMethod:@"GET"URLString:URLStringparameters:parameterserror:nil];
GETexample.comfoo=bar&baz[]=1&baz[]=2&baz[]=3
URLFormParameterEncoding
[[AFHTTPRequestSerializerserializer]requestWithMethod:@"POST"URLString:URLStringparameters:parameters];
POSTexample.com/
Content-Type:application/x-www-form-urlencoded
foo=bar&baz[]=1&baz[]=2&baz[]=3
JSONParameterEncoding
[[AFJSONRequestSerializerserializer]requestWithMethod:@"POST"URLString:URLStringparameters:parameters];
POSTexample.com/
Content-Type:application/json
{"foo":"bar","baz":[1,2,3]}
|
|