ios MKNetworkKit 的使用

翻译 2015年07月10日 15:00:11

常用框架比如:AFNetworking,ASIHttpRequest,SDWebImage,MKNetWorKit等。

iOS5已出来这么久了,而ASIHttpRequest的作者已经申明不更新了,在iOS5环境下,其实还是有些问题的。

现在MKNetWorkKi吸取了ASIHttpRequest与AFNetWorking的优点,并加入了自己特有的功能。

下载:

gitHub地址:https://github.com/MugunthKumar/MKNetworkKit.git

官方使用说明:http://blog.mugunthkumar.com/products/ios-framework-introducing-mknetworkkit/

github下载了该项目后,如果想运行其demo,一定要打开MKNetworkKit.xcworkspace该文件,若单独打开,则编译时会提示缺少libMKNetworkKit-iOS.a文件!!!


安装:

克隆下来之后把其中的 MKNetworkKit文件夹拖入项目,然后引入3个framework:
   CFNetwork.Framework  , SystemConfiguration.framework  , Security.framework
      

注意:由于MKNetworkKit支持ARC,我们在项目中要开启ARC,不然会报错


开启ARC自动内存控制机制:(开启ARC之后项目中所有的dealloc 、release 、autorelease都得注释掉)


使用方法:

  在需要使用的地方导入:#import"MKNetworkKit.h"

 http方式:


    GET请求     

  1. MKNetworkEngine *engine = [[MKNetworkEngine alloc] initWithHostName:@"192.168.2.176:3000" customHeaderFields:nil];  
  2. MKNetworkOperation *op = [engine operationWithPath:@"/index" params:nil httpMethod:@"GET" ssl:NO];  
  3. [op addCompletionHandler:^(MKNetworkOperation *operation) {  
  4.     NSLog(@"[operation responseData]-->>%@", [operation responseString]);  
  5. }errorHandler:^(MKNetworkOperation *errorOp, NSError* err) {  
  6.     NSLog(@"MKNetwork request error : %@", [err localizedDescription]);  
  7. }];  
  8. [engine enqueueOperation:op];  

    POST请求:

  1. MKNetworkEngine *engine = [[MKNetworkEngine alloc] initWithHostName:@"192.168.2.176:3000" customHeaderFields:nil];  
  2. NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];  
  3. [dic setValue:@"admin" forKey:@"username"];  
  4. [dic setValue:@"123" forKey:@"password"];  
  5.   
  6. MKNetworkOperation *op = [engine operationWithPath:@"/login" params:dic httpMethod:@"POST"];  
  7. [op addCompletionHandler:^(MKNetworkOperation *operation) {  
  8.     NSLog(@"[operation responseData]-->>%@", [operation responseString]);  
  9. }errorHandler:^(MKNetworkOperation *errorOp, NSError* err) {  
  10.     NSLog(@"MKNetwork request error : %@", [err localizedDescription]);  
  11. }];  
  12. [engine enqueueOperation:op];  

    https方式:

  1. #define serverHost               @"192.168.1.84:5558"  
  2.   
  3. - (NSDictionary *)getDataFromURL:(NSString *)Path params:(NSDictionary *)data  
  4. {  
  5.     NSLog(@"MKNetwork request URL:  %@%@   \n Data: %@",serverHost,Path,data);  
  6.       
  7.     __block NSDictionary *responseJSON;  
  8.     __block NSError *error = nil;  
  9.     MKNetworkEngine *engine = [[MKNetworkEngine alloc] initWithHostName:serverHost customHeaderFields:nil];  
  10.     MKNetworkOperation *op = [engine operationWithPath:Path  params:data httpMethod:@"POST" ssl:YES];  
  11. //    在请求中添加证书  
  12.     op.clientCertificate = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"client.p12"];  
  13.     op.clientCertificatePassword = @"test";  
  14. //   当服务器端证书不合法时是否继续访问  
  15.     op.shouldContinueWithInvalidCertificate=YES;  
  16.     [op addCompletionHandler:^(MKNetworkOperation *operation) {  
  17.         NSLog(@"[operation responseData]-->>%@", [operation responseString]);  
  18.         responseJSON=[NSJSONSerialization JSONObjectWithData:[operation responseData] options:kNilOptions error:&error];  
  19.         if(error) {  
  20.             NSLog(@"JSONSerialization failed! - error: %@", error);  
  21.         };  
  22.         error=nil;  
  23.     } errorHandler:^(MKNetworkOperation *errorOp, NSError* err) {  
  24.         error=err;  
  25.     }];  
  26.     [engine enqueueOperation:op];  
  27.     while(!error&&!responseJSON){}  
  28.     if (error) {  
  29.         NSLog(@"MKNetwork request error : %@", error);  
  30.         return nil;  
  31.     }  
  32.     if(responseJSON){  
  33.         NSLog(@"JSONSerialization successed! - responseJSON: %@", responseJSON);  
  34.     }  
  35.     return responseJSON;  
  36. }  
  37.   
  38.   
  39.     NSDictionary *params=[NSDictionary dictionaryWithObjectsAndKeys:@"admin",@"userName", @"123",@"password", nil];  
  40.     NSDictionary *responseDict = [self getDataFromURL:@"/login" params:params];  

下载文件:

  1. +(MKNetworkOperation*) downloadFatAssFileFrom:(NSString*) remoteURL toFile:(NSString*) filePath {  
  2.     MKNetworkEngine *engine = [[MKNetworkEngine alloc] initWithHostName:@"127.0.0.1:5558" customHeaderFields:nil];  
  3.     MKNetworkOperation *op = [engine operationWithURLString:remoteURL  
  4.                                                    params:nil  
  5.                                                httpMethod:@"GET"];  
  6.       
  7.     [op addDownloadStream:[NSOutputStream outputStreamToFileAtPath:filePath  
  8.                                                             append:YES]];  
  9.     [engine enqueueOperation:op];  
  10.     return op;  
  11. }  
  12. +(void)testDownload{  
  13.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);  
  14.     NSString *cachesDirectory = [paths objectAtIndex:0];  
  15.     NSString *downloadPath = [cachesDirectory stringByAppendingPathComponent:@"DownloadedFile.pdf"];  
  16.       
  17.     MKNetworkOperation *downloadOperation=[HttpManager downloadFatAssFileFrom:@"http://127.0.0.1:5558/QQ"  
  18.                                                                       toFile:downloadPath];  
  19.       
  20.     [downloadOperation onDownloadProgressChanged:^(double progress) {  
  21.         //下载进度  
  22.         NSLog(@"download progress: %.2f", progress*100.0);  
  23.     }];  
  24.     //事件处理  
  25.     [downloadOperation addCompletionHandler:^(MKNetworkOperation* completedRequest) {  
  26.         NSLog(@"download file finished!");  
  27.     }  errorHandler:^(MKNetworkOperation *errorOp, NSError* err) {  
  28.         NSLog(@"download file error: %@", err);  
  29.     }];  
  30. }  

上传文件:

  1. +(MKNetworkOperation*) uploadImageFromFile:(NSString*) filePath mimeType:(NSString *)fileType{  
  2.     MKNetworkEngine *engine = [[MKNetworkEngine alloc] initWithHostName:@"127.0.0.1:5558" customHeaderFields:nil];  
  3.     MKNetworkOperation *op = [engine operationWithPath:@"upload"  
  4.                                               params:[NSDictionary dictionaryWithObjectsAndKeys:  
  5.                                                       @"admin", @"username",  
  6.                                                       @"123", @"password",nil]  
  7.                                           httpMethod:@"POST"];  
  8.       
  9.     [op addFile:filePath forKey:@"media" mimeType:fileType];  
  10.       
  11.     // setFreezable uploads your images after connection is restored!  
  12.     [op setFreezable:YES];  
  13.       
  14.     [op addCompletionHandler:^(MKNetworkOperation* completedOperation) {  
  15.           
  16.         NSString *responseString = [completedOperation responseString];  
  17.         NSLog(@"server response: %@",responseString);  
  18.     } errorHandler:^(MKNetworkOperation *errorOp, NSError* err){  
  19.           
  20.         NSLog(@"Upload file error: %@", err);  
  21.     }];  
  22.       
  23.     [engine enqueueOperation:op];  
  24.       
  25.     return op;  
  26. }  
  27.   
  28. +(void)testUpload{  
  29.     NSString *uploadPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"SampleImage.jpg"];  
  30.     //    NSData *myData = [NSData dataWithContentsOfFile:uploadPath];  
  31.     //    NSLog(@">>>>>>>>%@",myData);  
  32.     MKNetworkOperation *uploadOperation = [HttpManager uploadImageFromFile:uploadPath mimeType:@"jpg"];  
  33.     [uploadOperation onUploadProgressChanged:^(double progress) {  
  34.         //        上传进度  
  35.         DLog(@"Upload file progress: %.2f", progress*100.0);  
  36.     }];  
  37. }  

上传文件时服务器端程序(Node.Js):

[javascript] view plaincopy
  1. var express = require('express')  
  2.     ,fs=require('fs');  
  3.   
  4. var app = module.exports = express.createServer();  
  5. // Configuration  
  6. app.configure(function(){  
  7.     app.use(express.bodyParser());  
  8.     app.use(express.methodOverride());  
  9.     app.use(app.router);  
  10. });  
  11. // Routes  
  12. app.post('/upload'function(req, res) {  
  13.     console.log(req);  
  14.     var tmp_path = req.files.media.path; // 获得文件的临时路径  
  15.     var target_path = './'+req.files.media.name;// 指定文件上传后的目录  
  16.     fs.rename(tmp_path, target_path, function(err) { // 移动文件  
  17.         if (err) throw err;  
  18.         fs.unlink(tmp_path, function() {// 删除临时文件夹文件,  
  19.             if (err) throw err;  
  20.             res.send({server:'success'});  
  21.             res.end();  
  22.         });  
  23.     });  
  24. });  
  25. app.listen(5558);  
  26. console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);  

IOS使用MKNetworkKit框架实现下载数据和上传数据

MKNetworkOperation类不仅可以指定下载文件的位置,还可以获得下载的进度,由于它采用整个应用共享单一队列的设计,所以可以准确地计算下载进度。话不多说,下面通过一个例子来说明下载数据和上传...

ios MKNetworkKit 的使用

常用框架比如:AFNetworking,ASIHttpRequest,SDWebImage,MKNetWorKit等。 iOS5已出来这么久了,而ASIHttpRequest的作者已经申明不更新...

【无线互联】ios开发之MKNetworkKit的介绍和使用

XXX

IOS:MKNetworkKit的网络请求(使用封装好的类)

既然看到本文章,至少你已经对MKNetworkKit不是太陌生了。那就废话少说,直接上代码。 yi...

iOS 网络请求框架MKNetworkKit使用方法(欢迎提建议和分享遇到的问题)

现在流行的第三方网络请求库有很多,ASIHTTPRequest、AFNetWorking等,每个人都自己的使用习惯,我推荐一个印度小伙子写的一个超轻量型框架MKNetWorkKit。 ...

一个iOS 框架介绍:MKNetworkKit

ASIHTTPRequest (作者:BenCopsey) 是一个使用简单,可用于各种从简单到复杂的 HTTP 请求,或者可用于处理 Amazon S3、Rackspace 等REST 服务的强大框架...

MKNetworkKit uses features only available in iOS SDK 4.0 and later报错解决方案

MKNetworkKit uses features only available in iOS SDK 4.0 and later报错解决方案 MKNetworkKit是一个非常优秀的网络请求框架...

ios开发之 mknetworkkit

mknetworkkit 结合了ASIHTTPRequest和AFNetworking这两个类库的优点,也增加了自己的一点新特性...

MKNetworkKit uses features only available in iOS SDK 4.0 and later报错解决方案 --- 有我的一点思想

转学长的博客 ------ 其实我自己也是有些博客的:请看我的博客 :-- 我的关于MKNetWorkKit想法   -------一下是我转载的内容--------博主是...

一个iOS 框架介绍:MKNetworkKit

ASIHTTPRequest (作者:BenCopsey) 是一个使用简单,可用于各种从简单到复杂的 HTTP 请求,或者可用于处理 Amazon S3、Rackspace 等REST 服务的强大框架...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ios MKNetworkKit 的使用
举报原因:
原因补充:

(最多只允许输入30个字)