• 网络请求之get与post异步请求


    直接上源码了,等了解比较透彻的时候在做详细讲解

    .h文件源码

    //
    //  DSRequestManager.h
    //  DeseDAZ
    //
    //  Created by 安浩 on 15/6/19.
    //  Copyright (c) 2015年 DAZ. All rights reserved.
    //
    
    /**
     *  网络请求
     */
    #import <Foundation/Foundation.h>
    
    //声明一个 blcok 属性 用来传值
    //finishBlcok 把请求完毕 解析好的数据传出来  id 可以代表任意类型
    typedef void (^FinishBlock)(id dataResponse);
    
    @interface DSRequestManager : NSObject<NSURLConnectionDelegate>
    
    @property (nonatomic,strong) NSMutableData *resultData;
    
    @property (nonatomic,strong) FinishBlock finishBlock;
    
    
    /**
     *  post 类方法
     *
     *  @param urlStr    接口参数  内部设计了接口基本链接的宏 只传后面跟的接口参数
     *  @param paramters 需要传的参数
     *  @param block     返回值
     */
    + (void)postRequestWithURL:(NSString *)urlStr
                     paramters:(NSDictionary *)paramters
                  finshedBlock:(FinishBlock)block;
    
    
    /**
     *  get 类方法
     *
     *  @param urlStr 接口参数  
     *  @param block  返回值
     */
    + (void)getRequestWithURL:(NSString *)urlStr
                    paramters:(NSDictionary *)paramters
                 finshedBlock:(FinishBlock)block;
    
    
    @end
    

    .m文件源码

    //
    //  DSRequestManager.m
    //  DeseDAZ
    //
    //  Created by 安浩 on 15/6/19.
    //  Copyright (c) 2015年 DAZ. All rights reserved.
    //
    
    #import "DSRequestManager.h"
    #import "APIHeader.h"
    @implementation DSRequestManager
    
    
    #pragma mark ----------post----------
    /**
     *  post 类方法
     *
     *  @param urlStr    接口参数  内部设计了接口基本链接的宏 只传后面跟的接口参数
     *  @param paramters 需要传的参数
     *  @param block     返回值
     */
    + (void)postRequestWithURL:(NSString *)urlStr
                     paramters:(NSDictionary *)paramters
                  finshedBlock:(FinishBlock)block{
        
        
        DSRequestManager *requestManager =[DSRequestManager new];
        
        requestManager.finishBlock = block;
        //拼接接口
        NSString *str =[NSString stringWithFormat:@"%@%@",PKAPI,urlStr];
        //转化 url
        NSURL *url = [NSURL URLWithString:str];
        
        //使用 NSMutableURLRequest 创建对象
        //NSURLRequest 是一个不可变的请求,默认执行的就是GET请求。也就是说,通过NSURLRequest无法指定 请求方式为 POST,因为TA是不可变的。
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        
        
        [request setHTTPMethod:@"POST"];
        
        //准备发送的字符串
        NSString *postStr = @"";
        //取出post参数中所有key
        NSArray *keyArray = [paramters allKeys];
        //遍历 拼接参数的字符串
        for (NSString *keyString in keyArray) {
            
            postStr = [NSString stringWithFormat:@"%@&%@=%@",postStr,keyString,[paramters objectForKey:keyString]];
            
        }
        
        [request setHTTPBody:[postStr dataUsingEncoding:NSUTF8StringEncoding]];
        
        //发出请求
        NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:requestManager];
    
        NSLog(connection ? @"网络连接创建成功" : @"网络连接连接创建失败");
        
    }
    
    #pragma mark ---------get----------
    /**
     *  get 类方法
     *
     *  @param urlStr 接口参数
     *  @param block  返回值
     */
    + (void)getRequestWithURL:(NSString *)urlStr
                    paramters:(NSDictionary *)paramters
                 finshedBlock:(FinishBlock)block{
        
        DSRequestManager *requestManager =[DSRequestManager new];
        
        requestManager.finishBlock = block;
        
        //准备发送的字符串
        NSMutableString *getStr = [urlStr mutableCopy];
        [getStr appendString:@""];
        //取出post参数中所有key
        NSArray *keyArray = [paramters allKeys];
        //遍历 拼接参数的字符串
        for (NSString *keyString in keyArray) {
            
            getStr = [NSMutableString stringWithFormat:@"%@&%@=%@",getStr,keyString,[paramters objectForKey:keyString]];
        }
    
        NSURL *url = [NSURL URLWithString:[getStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        
        
        NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:100];
    
        NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:requestManager];
       NSLog(connection ? @"网络连接创建成功" : @"网络连接连接创建失败");
    
    }
    
    
    
    /**
     *  接收到服务器回应的时回调
     */
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        
    
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
        if (!self.resultData) {
            self.resultData = [[NSMutableData alloc]init];
        } else {
            [self.resultData setLength:0];
        }
        
        if ([response respondsToSelector:@selector(allHeaderFields)]) {
            // 取得所有的请求的头
            NSDictionary *dic = [httpResponse allHeaderFields];
            NSLog(@"network---Header:%@",[dic description]);
        }
    }
    /**
     *  接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
     */
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {
        [self.resultData appendData:data];
    }
    /**
     *  数据传完之后调用此方法
     */
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection
    {
        
        NSError *error;
    
    
        id dic = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingMutableContainers error:&error];
        if (error) {
            NSLog(@"解析错误");
            self.finishBlock(nil);
        }
        
        if (self.finishBlock) {
            self.finishBlock(dic);
        }
    }
    /**
     *  网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
     */
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    {
        NSLog(@"network error : %@", [error localizedDescription]);
        
        if (self.finishBlock) {
            self.finishBlock(nil);
        }
    }
    
    
    @end
    

    HTTP 方法:GET 对比 POST

    暂时留链接 http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
    http://www.w3school.com.cn/jquery/jquery_ajax_get_post.asp

    推荐博客链接:http://www.brighttj.com/ios/ios-http-request-post-get.html

    On the road。。。
  • 相关阅读:
    VS2010,VS2012,VS2013中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法
    安装MySQL遇到的常见英文翻译
    IIS站点报拒绝访问Temporary ASP.NET Files的解决办法
    【教程】教你解决“Windows 资源保护找到了损坏文件但无法修复其中某些文件”的问题【转载】
    .net中使用XPath语言在xml中判断是否存在节点值的方法
    join 子句(C# 参考)
    sql:inner join,left join,right join,full join用法及区别
    xslt中substring 函数的用法
    如何查看mysql数据库表所使用的引擎(转载)
    FusionCharts 更新 chart data 数据
  • 原文地址:https://www.cnblogs.com/ianhao/p/4589884.html
Copyright © 2020-2023  润新知