[转帖]ios MKNetworkKit 的使用_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 6380 | 回复: 0   主题: [转帖]ios MKNetworkKit 的使用        下一篇 
zhang.chen
注册用户
等级:少校
经验:1145
发帖:69
精华:1
注册:2013-10-31
状态:离线
发送短消息息给zhang.chen 加好友    发送短消息息给zhang.chen 发消息
发表于: IP:您无权察看 2013-11-6 14:35:47 | [全部帖] [楼主帖] 楼主

摘要: ios MKNetworkKit 的使用 转载http://blog.csdn.net/marujunyy/article/details/8495810


目录:[ - ]


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

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

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

下载:





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请求:     


[cpp]view plaincopy

  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];<span style="font-family: SimSun;"> </span> 



    POST请求:


[cpp]view plaincopy

  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. MKNetworkOperation *op = [engine operationWithPath:@"/login" params:dic httpMethod:@"POST"]; 
  6. [op addCompletionHandler:^(MKNetworkOperation *operation) { 
  7.        NSLog(@"[operation responseData]-->>%@", [operation responseString]); 
  8. }errorHandler:^(MKNetworkOperation *errorOp, NSError* err) { 
  9.        NSLog(@"MKNetwork request error : %@", [err localizedDescription]); 
  10. }]; 
  11. [engine enqueueOperation:op]; 



    https方式:


[cpp]view plaincopy

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



下载文件:


[cpp]view plaincopy

  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. +(void)testDownload{ 
  12.  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
  13.  NSString *cachesDirectory = [paths objectAtIndex:0]; 
  14.  NSString *downloadPath = [cachesDirectory stringByAppendingPathComponent:@"DownloadedFile.pdf"]; 
  15.  MKNetworkOperation *downloadOperation=[HttpManager downloadFatAssFileFrom:@"http://127.0.0.1:5558/QQ" 
  16.  toFile:downloadPath]; 
  17.  [downloadOperation onDownloadProgressChanged:^(double progress) { 
  18.        //下载进度 
  19.        NSLog(@"download progress: %.2f", progress*100.0); 
  20.  }]; 
  21.  //事件处理 
  22.  [downloadOperation addCompletionHandler:^(MKNetworkOperation* completedRequest) { 
  23.        NSLog(@"download file finished!"); 
  24.  } errorHandler:^(MKNetworkOperation *errorOp, NSError* err) { 
  25.        NSLog(@"download file error: %@", err); 
  26.  }]; 



上传文件:


[cpp]view plaincopy

  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. +(void)testUpload{ 
  27.        NSString *uploadPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"SampleImage.jpg"]; 
  28.        // NSData *myData = [NSData dataWithContentsOfFile:uploadPath]; 
  29.        // NSLog(@">>>>>>>>%@",myData); 
  30.        MKNetworkOperation *uploadOperation = [HttpManager uploadImageFromFile:uploadPath mimeType:@"jpg"]; 
  31.        [uploadOperation onUploadProgressChanged:^(double progress) { 
  32.              // 上传进度 
  33.              DLog(@"Upload file progress: %.2f", progress*100.0); 
  34.        }]; 



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


[javascript]view plaincopy

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




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论