• NSURLConnection的GetPost方法


    习惯了用AFNetworking来处理网络请求,这次试试苹果源生控件的处理方式~~

    #import "ViewController.h"
    
    @interface ViewController () <NSURLConnectionDataDelegate>
    @property (nonatomic, strong) NSMutableData *data;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        [self setupView];
    }
    
    - (void)setupView
    {
        [self connection];
    }
    
    - (void)connection
    {
        NSString *urlStr = [NSString stringWithFormat:@"这里存放所需要的url"];
        
        //进行转码,以免中文乱码
        urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        
        NSURL *url = [NSURL URLWithString:urlStr];
        
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
        //设置请求超时时间
        request.timeoutInterval = 10.0;
        
        [self sendAsyncOnBlock:request];
    }
    
    //发送get请求,用block回调
    - (void)sendAsyncOnBlock:(NSMutableURLRequest *)request
    {
        NSOperationQueue *queue = [NSOperationQueue mainQueue];
        
        [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            
            //注意,这里回调block的线程,我是设置为主线程的。因为往往,在这里面,需要更新UI界面,而在iOS开发中,
            //更新UI界面必须在主线程中更新~~
            //
            //然后,解析json
            
            if (data){  //请求成功
                NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];   //解析数据
                
            }
            else{  //请求失败
                //返回的json数据为空
            }
        }];
    }
    
    
    //使用代理方式,发送get请求
    - (void)sendAsyncOnDelegate:(NSMutableURLRequest *)request
    {
        NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
        [connection start];
    }
    
    //发送post请求
    - (void)sendPostReq
    {
        NSString *urlStr = [NSString stringWithFormat:@"这里存放所需要的url"];
        
        //进行转码,以免中文乱码
        urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        
        NSURL *url = [NSURL URLWithString:urlStr];
        
        //设置为post请求
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];  //默认是get请求
        request.HTTPMethod = @"POST";
        request.timeoutInterval = 10.0;
        
        //通过请求头,告知服务器,客户端的类型
        [request setValue:@"ios" forHTTPHeaderField:@"User-Agent"];
        
        //设置请求体:(必须要设置,没有具体数据,不做示范)
    //    NSString *param = [NSString stringWithFormat:];  
    //    request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
        
        //发送请求
        NSOperationQueue *queue = [NSOperationQueue mainQueue];
        [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            
        }];
    }
    
    #pragma mark -- NSURLConnectionDataDelegate
    
    //当接受到服务器的响应(连通了服务器)就会调用
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        self.data = [[NSMutableData alloc] init];
    }
    
    //请求错误(失败)的时候调用(请求超时断网没有网, 一般指客户端错误)
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    {
        
    }
    
    //当接受到服务器的数据就会调用(可能会被调用多次, 每次调用只会传递部分数据)
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {
        //在这里,当下载大文件资源时,是需要拼接数据的
        [self.data appendData:data];
    }
    
    //当服务器的数据接受完毕后就会调用
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
        
    }
    @end
    
  • 相关阅读:
    Docker集群管理之Swarm介绍
    【响应式编程的思维艺术】 (1)Rxjs专题学习计划
    【Angular专题】 (3)装饰器decorator,一块语法糖
    angularjs1.X进阶笔记(3)——如何重构controller
    【Angular专题】——(2)【译】Angular中的ForwardRef
    【Angular专题】——(1)Angular,孤傲的变革者
    00067_字符串类中涉及正则表达式的常用方法
    Web编辑器 图片粘贴上传,实现图文粘贴,图片自动上传
    wangEditor 图片粘贴上传,实现图文粘贴,图片自动上传
    批量下载文件示例
  • 原文地址:https://www.cnblogs.com/ziyi--caolu/p/4673130.html
Copyright © 2020-2023  润新知