iOS开发之普通网络异步请求与文件下载方法
先来说说普通异步下载方法,分为POST、GET两种
/** GET请求获取数据*/ + (void)getDataWithUrl:(NSString *)strUrl finishBlock:(ECGNCNSDictionaryAndNSErrorBlock)finishBlock {if (strUrl.length == 0) {return;}NSURL *url = [NSURL URLWithString:strUrl];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"GET";[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {//解析并回调数据NSDictionary *dicData = [self dictionaryForJsonData:data];if (finishBlock) {finishBlock(dicData, error);}}];[dataTask resume]; }/** POST请求获取数据*/ + (void)postParam:(NSDictionary *)dicParam toUrl:(NSString *)strUrl finishBlock:(ECGNCNSDictionaryAndNSErrorBlock)finishBlock {if (dicParam == nil || strUrl.length == 0) {return;}NSURL *url = [NSURL URLWithString:strUrl];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];request.HTTPBody = [self compactFormatDataForDictionary:dicParam];NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {//解析并回调数据NSDictionary *dicData = [self dictionaryForJsonData:data];if (finishBlock) {finishBlock(dicData, error);}}];[dataTask resume]; }/** 将字典转换成json格式字符串,不含\n这些符号*/ - (NSData *)compactFormatDataForDictionary:(NSDictionary *)dicJson {if (![dicJson isKindOfClass:[NSDictionary class]]) {return nil;}NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dicJson options:0 error:nil];if (![jsonData isKindOfClass:[NSData class]]) {return nil;}return jsonData; }/** 将二进制数据转换成字典*/ - (NSDictionary *)dictionaryForJsonData:(NSData *)jsonData {if (![jsonData isKindOfClass:[NSData class]] || jsonData.length < 1) {return nil;}id jsonObj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];if (![jsonObj isKindOfClass:[NSDictionary class]]) {return nil;}return [NSDictionary dictionaryWithDictionary:(NSDictionary *)jsonObj]; }
下面说说下载文件的方法
/** 下载文件方法*/ - (void)downLoadFileWithUrl:(NSString *)urlStr finishBlock:(GSNetLibTMIdAndDataAndErrorBlock)finishBlock {if (urlStr.length == 0) {return;}NSURL *url = [NSURL URLWithString:urlStr];NSURLSession *session = [NSURLSession sharedSession];//构造下载任务NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {//下载成功回调,文件数据会被默认存储在一个临时目录if (error == nil) {if (location != nil && [location path].length > 0) {NSString *tmpFilePath = [location path];NSData *data = [NSData dataWithContentsOfFile:tmpFilePath];//回调数据if (finishBlock) {finishBlock(0, data, error);}//删除临时目录文件NSFileManager *fileMgr = [NSFileManager defaultManager];[fileMgr removeItemAtPath:tmpFilePath error:nil];}}}];//执行任务 [downloadTask resume]; }
转载于:https://www.cnblogs.com/hecanlin/p/10911370.html
iOS开发之普通网络异步请求与文件下载方法相关推荐
- java httpclient 异步请求_java_java实现HttpClient异步请求资源的方法,本文实例讲述了java实现HttpClien - phpStudy...
java实现HttpClient异步请求资源的方法 本文实例讲述了java实现HttpClient异步请求资源的方法.分享给大家供大家参考.具体实现方法如下: package demo; import ...
- iOS开发常用之网络、网页
网络相关 网络连接 AFNetworking - ASI不升级以后,最多人用的网络连接开源库,iOS的网络编程之AFNetworking使用,iOS的开发下载文件速度计算 , AFNetworking ...
- 【IOS开发高级系列】异步绘制专题
1 图片处理 1.1 编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate函数创建CGIm ...
- 【iOS开发】---- Reachability 网络监测
在开发的过程中,我们需要检测网络状态,比如当前网络状态(连接,断开),网络环境(2G/3G,WIFI)等.苹果提供了一个在iOS环境下检测网络用的库:Reachability.它能方便的监测网络状态, ...
- IOS开发控制器之间传值的几种小方法
在IOS开发中或面试中,经常会遇到,两个或者多个控制器之间传值的问题 ,总结的集中方法仅供参考! 问题 :将B控制器中的textField 输入内容,传到A控制器中的label上显示出来,如何传值? ...
- jQuery使用ajax异步请求400解决方法
jQuery使用ajax异步请求访问状态码400解决方法: 先直接上结论:首先检查下自己使用的请求方式,我原来用的是post方式,更改为ajax之后就解决了,才反应过来应该是版本不兼容的问题! < ...
- iOS开发实践之网络检測Reachability
在网络应用开发中.有时须要对用户设备的网络状态进行实时监控.以至于对用户进行友好提示 或者依据不同网络状态处理不一样的逻辑(如视频播放app,依据当前的网络情况自己主动切换视频清晰度等等).用Reac ...
- iOS开发——openssl生成CSR (pkcs10) 请求证书
由于涉及在线开户相关,所以整理一下~ 本文在前人的基础上更加完善:通过openssl 生成证书请求CSR 符合pkcs10的语法规范 为客户端生成,代码为C语言,可以直接在xcode的中于objec ...
- iOS开发UI中懒加载的使用方法
1.懒加载基本 懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其getter方法.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载 ...
最新文章
- 精灵盛典电脑模拟器服务器怎么修改,精灵盛典ios电脑版
- Google Python Class --- Sorting
- 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第7章-二阶时滞多智能体系统分组一致性
- Linux下百度网盘一直进入不了登陆界面的解决方案
- 推荐系统User-Item Embedding图算法
- Scala教程之:Either
- window7连接其他计算机的打印机,win7系统电脑怎样连接其它电脑上在打印机?
- 郎溪 溪流_到无限(溪流)和超越!
- QT 010 Qt 4.2 在线手册含UML图解释 User's Guide Documentation
- HDFS某个节点的磁盘满了
- HttpClient之Java爬虫工具
- C盘下出现msdia80.dll文件
- 文件截取\裁剪工具软件
- 你不是不优秀,而是太着急
- 在最美的时候,你遇见了谁?
- NOIP 2012 Senior 2 - 国王游戏
- STC12C5A60S2自主适应时钟延时函数
- 人像摆姿参考--西野七瀬(1)
- 我的暑期实习找工作经历
- C++ Opencv imfill 孔洞填充函数的实现(更新后)
热门文章
- 词法分析器c语言带注释,C语言词法分析器内容说明注释完整可运行代码.doc-资源下载在线文库www.lddoc.cn...
- oracle中order by 2,关于oracle中ROWNUM和ORDER BY的问题(2)
- leetcode165. 比较版本号 超级重要的细节
- leetcode61 旋转链表
- C++(STL):31 ---关联式容器map源码剖析
- 创建与打开IPC通道的POSIX和SYSTEM V方法
- 《Python Cookbook 3rd》笔记(1.3):保留最近N个元素
- 渔翁服务器密码机的环境配置
- 如期而至,GCC 4.9.0正式版发布!
- 提高编程水平的一段必经之路,研读官方文档