配色: 字号:
iOS应用开发中AFNetworking库的常用HTTP操作方法小结
2016-12-09 | 阅:  转:  |  分享 
  
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]}





















献花(0)
+1
(本文系白狐一梦首藏)