• 异步post请求之代理方法


      1 #import "ViewController.h"
      2 #import "Header.h"
      3 
      4 @interface ViewController ()<NSURLSessionDataDelegate>
      5 
      6 /**
      7  *  用于保存相关的数据
      8  */
      9 @property (nonatomic, strong) NSMutableData *resultData;
     10 
     11 @end
     12 
     13 @implementation ViewController
     14 
     15 - (void)viewDidLoad {
     16     [super viewDidLoad];
     17     // Do any additional setup after loading the view, typically from a nib.
     18 }
     19 
     20 // 对数据进行加载:使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别
     21 // 要处理下载任务的使用使用此任务NSURLSessionDownloadTask
     22 // 要处理上传任务使用:NSURLSessionUploadTask
     23 
     24 #pragma mark - post请求(异步)
     25 - (IBAction)postRequest:(UIButton *)sender {
     26 
     27     // 1.创建url
     28     NSURL *url = [NSURL URLWithString:GET_URL];
     29     
     30     // 2.创建请求
     31     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
     32 
     33 
     34     // 2.5.设置body
     35     // 创建一个连接字符串(这个内容在以后的开发中接口文档都有标注)
     36     NSString *dataStr = POST_BODY;
     37 
     38     // 对连接字符串进行编码【这一步千万不能忘记】
     39     NSData *postData = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
     40 
     41     // 设置请求格式为post请求【在这里POST必须大写】
     42     [request setHTTPMethod:@"POST"];
     43 
     44     // 设置请求体(body)
     45     [request setHTTPBody:postData];
     46 
     47     // 3.创建session对象并设置代理
     48     // 参数一:模式的设置
     49     /*
     50      defaultSessionConfiguration 默认会话模式
     51      ephemeralSessionConfiguration 瞬时会话模式
     52      backgroundSessionConfigurationWithIdentifier 后台会话模式
     53      */
     54     // 参数二:代理
     55     // 参数三:线程队列
     56     NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
     57     
     58     
     59     // 4.创建task对象
     60     NSURLSessionDataTask *task = [session dataTaskWithURL:url];
     61     
     62     
     63     // 5.启动任务
     64     [task resume];
     65     
     66     // 对数据进行加载:使用NSURLSessionDataTask和NSURLSessionTask两者没有本质区别
     67     // 要处理下载任务的使用使用此任务NSURLSessionDownloadTask
     68     // 要处理上传任务使用:NSURLSessionUploadTask
     69 
     70 }
     71 
     72 #pragma mark - 实现协议方法
     73 // 服务器开始响应
     74 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
     75     
     76     // 允许服务器响应【在这个地方只有允许服务器响应了才会接收到数据】
     77     completionHandler(NSURLSessionResponseAllow);
     78     
     79     // 初始化data,稍后进行片段的拼接存储
     80     self.resultData = [NSMutableData data];
     81 }
     82 
     83 // 接收数据拼接
     84 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
     85     
     86     // 反复执行,然后拼接相关的片段
     87     [self.resultData appendData:data];
     88 }
     89 
     90 // 数据接收完成,网络请求结束
     91 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
     92     
     93     // 解析
     94     if (error == nil) {
     95         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
     96         NSLog(@"%@", dic);
     97     }
     98 }
     99 
    100 @end
  • 相关阅读:
    Python排序算法之选择排序
    Python排序算法之冒泡排序
    http和https的区别
    【转】Robot Framework作者建议如何选择自动化测试框架
    内联的两种方式
    生产者与消费者以及ActiveMQ
    QT定时器
    生产者与消费者
    QT实现输入框与下拉框提示并可模糊匹配
    GetQueuedCompletionStatus客户端前端和server之间的通信
  • 原文地址:https://www.cnblogs.com/zhizunbao/p/5483260.html
Copyright © 2020-2023  润新知