异步post请求之代理方法
#import "ViewController.h"
#import "Header.h" @interface ViewController ()<NSURLSessionDataDelegate> /**
* 用于保存相关的数据
*/
@property (nonatomic, strong) NSMutableData *resultData; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} // 对数据进行加载:使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别
// 要处理下载任务的使用使用此任务NSURLSessionDownloadTask
// 要处理上传任务使用:NSURLSessionUploadTask #pragma mark - post请求(异步)
- (IBAction)postRequest:(UIButton *)sender { // 1.创建url
NSURL *url = [NSURL URLWithString:GET_URL]; // 2.创建请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 2.5.设置body
// 创建一个连接字符串(这个内容在以后的开发中接口文档都有标注)
NSString *dataStr = POST_BODY; // 对连接字符串进行编码【这一步千万不能忘记】
NSData *postData = [dataStr dataUsingEncoding:NSUTF8StringEncoding]; // 设置请求格式为post请求【在这里POST必须大写】
[request setHTTPMethod:@"POST"]; // 设置请求体(body)
[request setHTTPBody:postData]; // 3.创建session对象并设置代理
// 参数一:模式的设置
/*
defaultSessionConfiguration 默认会话模式
ephemeralSessionConfiguration 瞬时会话模式
backgroundSessionConfigurationWithIdentifier 后台会话模式
*/
// 参数二:代理
// 参数三:线程队列
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; // 4.创建task对象
NSURLSessionDataTask *task = [session dataTaskWithURL:url]; // 5.启动任务
[task resume]; // 对数据进行加载:使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别
// 要处理下载任务的使用使用此任务NSURLSessionDownloadTask
// 要处理上传任务使用:NSURLSessionUploadTask } #pragma mark - 实现协议方法
// 服务器开始响应
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler { // 允许服务器响应【在这个地方只有允许服务器响应了才会接收到数据】
completionHandler(NSURLSessionResponseAllow); // 初始化data,稍后进行片段的拼接存储
self.resultData = [NSMutableData data];
} // 接收数据拼接
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data { // 反复执行,然后拼接相关的片段
[self.resultData appendData:data];
} // 数据接收完成,网络请求结束
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { // 解析
if (error == nil) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@", dic);
}
} @end
异步post请求之代理方法的更多相关文章
- 异步get请求之代理方法
#import "ViewController.h" #import "Header.h" @interface ViewController ()<NS ...
- 异步post请求之Block方法
#import "ViewController.h" #import "Header.h" @interface ViewController ()<NS ...
- 异步get请求之Block方法
#import "ViewController.h" #import "Header.h" @interface ViewController ()<NS ...
- 弃用的异步get和post方法之代理方法
#import "ViewController.h" #import "Header.h" @interface ViewController () <N ...
- ios网络学习------2 用非代理方法实现同步post请求
#pragma mark - 这是私有方法,尽量不要再方法中直接使用属性,由于一般来说属性都是和界面关联的,我们能够通过參数的方式来使用属性 #pragma mark post登录方法 -(void) ...
- iOS 多个异步网络请求全部返回后再执行具体逻辑的方法
对于dispatch多个异步操作后的同步方法,以前只看过dispatch_group_async,看看这个方法的说明: * @discussion * Submits a block to a dis ...
- PHP异步请求之fsockopen()方法详解
正常情况下,PHP执行的都是同步请求,代码自上而下依次执行,但有些场景如发送邮件.执行耗时任务等操作时就不适用于同步请求,只能使用异步处理请求. 场景要求: 客户端调用服务器a.php接口,需要执行一 ...
- IOS9中使用NSURLConection发送异步网络请求
IOS9中使用NSURLConection发送异步网络请求 在ios9中,NSURLConection的sendSync..和sendAsync已经过时.被NSURLSession代替. 以下蓝色部分 ...
- iOS_网络请求_代理方式
#pragma mark - 网络请求代理方式(异步) - (IBAction)DelegateButtonDidClicked:(UIButton *)sender { // 1.拼接 urlStr ...
随机推荐
- MyBatis 入门
什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集.MyBatis ...
- C++ Web Service SDK
https://github.com/zaphoyd/websocketpp https://github.com/aws/aws-sdk-cpp
- DDD:建模原语 之 四象图(转载的神文)
“模型.状态和行为特征.场景”和“四象图”,建模观的命名与立象. 建模原语:四象图 作者:achieveidea@gmail.com 命名:模型.结构特征.行为特征.场景(及其规约). 释义:模型,描 ...
- Reinforcement Learning
Q-learning 高潮博文 http://mnemstudio.org/path-finding-q-learning-tutorial.htm 模式识别与机器学习的区别. http://www. ...
- [ShortCut] Visual Studio快捷键
msdn官方快捷键说明:https://msdn.microsoft.com/zh-cn/library/da5kh0wa.aspx 测试工具: visual studio 2013 操作步骤: 1. ...
- ASP.NET运行时详解 生命周期入口分析
说起ASP.NET的生命周期,网上有很多的介绍.之前也看了些这方面的博客,但我感觉很多程序猿像我一样,看的时候似乎明白,一段时间过后又忘了.所以,最近Heavi花了一段时间研究ASP.NET的源代码, ...
- ASP.NET的简单与面向对象开发
ASP.NET开发,一开始是为了超赶时间完成任务,只能把功能实现即可.如下面一个功能,在网页中有一个铵钮,用户点一点切换网页的图片,再点一点又切换回来.我们要怎样做?在铵钮事件中去变更图片的路径即可. ...
- 以对象的方式来访问xml数据表(二)
为什么要以对象的方式来访问xml数据表? 还记得,自己是在一次完成师兄布置的任务时接触到了xml,那时候需要用xml来作为数据文件,保存一个简单的图书管理系统的数据.于是就知道了,可以用xml文件来保 ...
- c++中stl容器的常用示例
1. set(集合)——包含了经过排序了的数据,这些数据的值(value)必须是唯一的. 也就是说输入set容器后得到数据,会去重并排序. s.insert()插入一个元素 s.begin ...
- smartstore-net
记录一下,抽空下载源码了研究下