9原生post异步请求 ios_ios 原生网络请求设置请求头 - CSDN
  • 网上有个公开的天气接口:天气 ,点进其中的... 这里面提供了get、post请求的格式要求。 1、get: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14

    网上有个公开的天气接口:天气 ,点进其中的getSupportCityDataset接口,用这个接口为例写一下iOS上的HTTP请求的写法。 这里面提供了get、post请求的格式要求。

    1、get:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <span style="font-size:14px;">NSString * URLString = @"http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getSupportCityDataset?theRegionCode=广东";
        NSURL * URL = [NSURL URLWithString:[URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
         
        NSURLRequest * request = [[NSURLRequest alloc]initWithURL:URL];
        NSURLResponse * response = nil;
        NSError * error = nil;
        NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        if (error) {
            NSLog(@"error: %@",[error localizedDescription]);
        }else{
            NSLog(@"response : %@",response);
            NSLog(@"backData : %@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
        }
    </span>
    get方法的请求参数是放在长长的URL字符串里面,这里只需要一个参数,就是地区的编号或名字,通过这个参数,服务器返回属于这个区域内支持天气查找的城市列表。如果有更多的参数也是放在URL字符串里面,至于参数的组织方式,就看服务器的要求了。

    用字符串构建NSURL,最好在使用URLWithString的时候把原字符串进行一下UTF8转码,关于为何要转码,看下这里第一部分。然后NSURL对象构建NSURLRequest,使用NSURLConnection的同步方法,传入request对象就可以通过get方法获取数据。

    这里有个NSError对象地址传入,用于做错误判断,网络的实际情况是多变的,必须要考虑请求错误的情况,否则可能导致程序奔溃。

    2、post:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
        NSURL * URL = [NSURL URLWithString:[URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
         
        NSString * postString = @"theRegionCode=广东";
        NSData * postData = [postString dataUsingEncoding:NSUTF8StringEncoding];  //将请求参数字符串转成NSData类型
         
        NSMutableURLRequest * request = [[NSMutableURLRequest alloc]init];
        [request setHTTPMethod:@"post"]; //指定请求方式
        [request setURL:URL]; //设置请求的地址
        [request setHTTPBody:postData];  //设置请求的参数
         
        NSURLResponse * response;
        NSError * error;
        NSData * backData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
         
        if (error) {
            NSLog(@"error : %@",[error localizedDescription]);
        }else{
            NSLog(@"response : %@",response);
            NSLog(@"backData : %@",[[NSString alloc]initWithData:backData encoding:NSUTF8StringEncoding]);
        }
    post方式的时候参数是放在HTTPBody里面的,而且需要将字符串转码成响应的NSData类型,在接口文档里一般都有指出转码方式,需要按指定方式转码,这里的UTF8,也有gb2312的。request构建好了之后,和get方法一样使用NSURLConnection请求数据。

    3、同步和异步请求:

    一般网络请求都需要一段时间,哪怕数据再少、网络再好,都会有一段时间,而且很多时候必须考虑在网络不好的时候的app状态。使用同步请求只需安心等待数据就可以,不需要做额外操作,上面两例都是同步请求,connection调用方法后会把返回请求的数据,无需做什么其他事。但是同步会阻塞线程,如果通过点击button来发起请求,那么按钮会停留在highLight状态直到请求结束,会造成一种app卡住、死机的感觉,很不好。

    异步get:

    ?
    1
    2
    3
    4
    5
    6
        NSURL * URL = [NSURL URLWithString:[URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
         
        NSURLRequest * request = [[NSURLRequest alloc]initWithURL:URL];
         
        _connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];  (1)
    异步post类似,不再是使用NSURLConnection调用方法直接得到数据,而是使用(1)位置方法构建一个NSURLConnection对象,这个方法会默认开始请求数据。接下来关键就是靠委托了。因为请求的时间未知,所以使用委托模式的回调作用,在数据回来是调用协议方法。post和get委托方法处理一样。

    协议方法:

    要注意的是这里有两个委托:NSURLConnectionDataDelegate和NSURLConnectionDelegate,前一个继承于后一个,获取数据的方法是定义在前一个委托里面的,所以只要遵循NSURLConnectionDataDelegate就可以了。

    一般用到四个委托方法:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <pre name="code" class="objc">//接受到respone,这里面包含了HTTP请求状态码和数据头信息,包括数据长度、编码格式等
    -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ NSLog(@"response = %@",response); _backData = [[NSMutableData alloc]init];
    }
     
    //接受到数据时调用,完整的数据可能拆分为多个包发送,每次接受到数据片段都会调用这个方法,所以需要一个全局的NSData对象,用来把每次的数据拼接在一起
    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
        [_backData appendData:data];
    }
     
    //数据接受结束时调用这个方法,这时的数据就是获得的完整数据了,可以使用数据做之后的处理了
    -(void)connectionDidFinishLoading:(NSURLConnection *)connection{
        NSLog(@"%@",[[NSString alloc]initWithData:_backData encoding:NSUTF8StringEncoding]);
    }
     
    //这是请求出错是调用,错误处理不可忽视
    -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
        if (error.code == NSURLErrorTimedOut) {
            NSLog(@"请求超时");
        }
        NSLog(@"%@",[error localizedDescription]);
    }
    </pre><br>
    <pre class="brush:java;"></pre>
    <pre class="brush:java;"></pre>
     
    <p></p>
    <pre class="brush:java;"></pre>
       最后,请求可以设置超时时间:<pre class="brush:java;">NSURLRequest * request = [[NSURLRequest alloc]initWithURL:URL cachePolicy:0 timeoutInterval:8.0];</pre>或者:<pre class="brush:java;">NSMutableURLRequest * request = [[NSMutableURLRequest alloc]initWithURL:URL];
     [request setTimeoutInterval:8.0];</pre>请求时间超过所设置的超时时间,会自动调用<pre class="brush:java;">-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error</pre>但是有个问题是怎么把判断是超时导致的请求失败,上面的例子里已经写了,可以根据返回的error的code进行判断。了解不同情况的请求失败,可以更好的给用户提示。<br>
    <br>
    <p></p> 
    展开全文
  • HTTP : 是应用层的网络传输协议,对于http的请求方式 包括两种:GET 和 POST , 链接方式也包括两种 同步链接 和 异步链接 GET 和 POST 请求的区别: 1:GET请求 : 服务器的地址 和 请求参数都会出现在请求接口中,也...


    转自:http://blog.csdn.net/qq_25475307/article/details/48437767


    HTTP : 是应用层的网络传输协议,对于http的请求方式 包括两种:GET 和 POST , 链接方式也包括两种 同步链接 和 异步链接 
    GET 和 POST 请求的区别: 
    1:GET请求 : 服务器的地址 和 请求参数都会出现在请求接口中,也就是说 服务器地址和请求参数共同组成了请求借口, 然而POST请求,请求参数不会出现在请求接口中,而是作为请求体提交给服务器. 
    2:因为GET请求的请求参数 会出现在请求接口中,所有信息容易被捕获,安全性低,而POST请求的请求参数封装在请求体中,作为二进制流进行传输,安全性高, 
    3:GET请求的请求接口中有请求参数,而对于请求接口我们有字节限制,这样导致GET请求有一定的局限性. 所以对于GET请求只能上传小型数据,而对于POST请求,请求体理论上可以无限大,所以,一般来说,从服务器请求数据用GET 上传数据用POST,
    
    两种请求方式:都能给服务器传输数据 
    不同点: 
    1 、给服务器传输数据的⽅式: 
    GET :通过网址字符串 。 
    POST :通过 data 
    2 、传输数据的⼤小: 
    GET :网址字符串最多 255 字节 。 
    POST :使⽤ NSData ,容量超过 1G 
    3 、安全性 : 
    GET :所有传输给服务器的数据,显⽰示在⺴址里,类似于密码的明⽂输入,直接可⻅。 
    POST :数据被转成 NSData( ⼆进制数据 ) ,类似于密码的密⽂输⼊,⽆法直接读取。
    
    同步异步连接的区别: 
    同步连接:程序容易出现卡死现象 
    异步连接:等待数据返回。 界面更加流畅 
    异步联接有两种实现⽅式: 
    (1)设置代理,接收数据 
    (2)实现 block
    
    服务器端 PHP 简单接⼝ 
    PHP 中使⽤不同的函数获取数据,⽀持不同的请求方式: 
    (1)GET 请求:使⽤GET[“key”]获取数据网址中的数据(2)POST请求:使⽤_POST[“key”] 获取上传 data 中的数据 
    (3)GET、POST 请求:使⽤ $_REQUEST[“key”] 获取数据
    
    在 iOS 平台使⽤ NSURL 、 NSURLRequest 等对象完成与接⼝的交互
    
    ⺴络请求的步骤: 
    1 、 NSURL ; 
    2 、 NSURLRequest ; 
    3 、 NSURLConnection ; 
    4 、处理 Error 或者返回数据
    
    代码部分:

    
    
    #define kPicURL @"http://image.zcool.com.cn/56/13/1308200901454.jpg"
    #define kNewsURL @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213"
    #define kTuDouURL @"http://api.tudou.com/v3/gw?method=album.channel.get&appKey=myKey&format=xml&channel=c&pageNo=1&pageSize=15"
    #define kTuDouURLPost @"http://api.tudou.com/v3/gw?"
    
    ====================================================== 
    代码:
    
    @interfaceViewController ()<NSURLConnectionDataDelegate>
    
    @property (retain, nonatomic) IBOutlet UIImageView *ImageView;
    @property (nonatomic,retain)NSMutableData *data; //用来接收,拼接每一次数据
    
    @end
    
    @implementation ViewController
    
    //同步GET
    - (IBAction)synGET:(id)sender {
    
        //1: 创建url对象
            //(1)创建网址字符串
            NSString *urlStr = [NSString stringWithFormat:@"%@",kPicURL];  //图片
              //NSString *urlStr = [NSString stringWithFormat:@"%@",kNewsURL];  //新闻
            //(2).再编码
            NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            //(3)创建url
            NSURL *url = [NSURL URLWithString:newStr];
    
        //2: 创建request对象
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        //3: 请求
    
        NSURLResponse *response = nil;
        NSError *error = nil;
    
        NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        NSLog(@"回应  %@",response);
        NSLog(@"错误 %@",error);
       // NSLog(@"%@",data);
       // self.ImageView.image = [UIImage imageWithData:data];
    
        //解析新闻
        NSDictionary *newsDic = [NSJSONSerialization JSONObjectWithData:data options:5 error:nil];
        NSLog(@"%@",newsDic);
    }
    
    同步POST 
    POST请求用NSMutableURLRequest创建可变请求对象 目的是为了追加HTTPBody
    
    - (IBAction)synPOST:(id)sender {
        //1:创建URl对象
          //(1)创建网址字符串
        //post请求只要网址
        NSString *urlStr = [NSString stringWithFormat:@"%@",kTuDouURLPost];
          //(2)创建url对象
        NSURL *url = [NSURL URLWithString:urlStr];
    
        //2:创建可变请求对象
        NSMutableURLRequest *muRequest = [NSMutableURLRequest requestWithURL:url];
        //3:设置请求体
        //参数
        NSString *paraStr = @"method=album.channel.get&appKey=myKey&format=json&channel=c&pageNo=1&pageSize=15";
        //把请求参数封装到NSData
        NSData *data = [paraStr dataUsingEncoding:NSUTF8StringEncoding];
        [muRequest setHTTPBody:data];
        //设置请求方式
        [muRequest setHTTPMethod:@"POST"];
        //4:请求
        NSData *data1 = [NSURLConnection sendSynchronousRequest:muRequest returningResponse:nil error:nil];
    
        //解析
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data1 options:0 error:nil];
        NSLog(@"%@",dic);
    
    }
    
    异步GET
    
    - (IBAction)asynGET:(id)sender {
        //1 创建url对象
        //(1)创建网址字符串
        NSString *urlStr = [NSString stringWithFormat:@"%@",kPicURL];
        //(2)再编码 //防止存在中文
        NSString *newStr  = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        //(3)创建对象
        NSURL *url = [NSURL URLWithString:newStr];
    
        //2 创建request对象
        NSURLRequest *reQuest = [NSURLRequest requestWithURL:url];
        //3 请求 并设置代理
        [NSURLConnection connectionWithRequest:reQuest delegate:self];
    
        //当你返回或者不请求数据时候 取消
        //NSURLConnection *connection = [NSURLConnection connectionWithRequest:reQuest delegate:self];
        //取消请求
        //[connection cancel];
    
        //使用Block发送异步请求  与下面 数据加载完成 是同一个时机  一般能用代理的地方就能用block  能用block的地方都能用代理  但是block请求因为没有返回值无法获取NSURLConnection对象
        [NSURLConnection sendAsynchronousRequest:reQuest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            //数据操作
    //        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    //        NSLog(@"%@",dic);
            _ImageView.image = [UIImage imageWithData:data];
        }];
    }
    
    异步POST
    
    - (IBAction)asynPOST:(id)sender {
        //1 创建url
        NSURL *url = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?"];
        //2 创建可变的请求对象
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        //3 设置请求体
        NSString *paraStr =  @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
        //把参数封装到NSData
        NSData *bodydata = [paraStr dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:bodydata];
        //设置请求方式
        [request setHTTPMethod:@"POST"];
        //4 请求 并设置代理
        [NSURLConnection connectionWithRequest:request delegate:self];
    }
    
    #pragma mark - NSURLConmectionDtaDelegate
    //链接到服务器
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    //初始化data
        if (_data == nil) {
               self.data = [NSMutableData data];
        }
    }
    //接收数据
    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    //拼接数据
        [_data appendData:data];
        _ImageView.image = [UIImage imageWithData:_data];
    }
    //结束 数据加载完成
    -(void)connectionDidFinishLoading:(NSURLConnection *)connection{
        //数据请求完成 进行数据的处理
        NSDictionary *newsDic = [NSJSONSerialization JSONObjectWithData:_data options:0 error:nil];
        NSLog(@"%@",newsDic);
        }


    展开全文
  • iOS 原生网络请求写法

    2016-02-03 11:46:55
    //网络请求   NSURLSession * mySession = [NSURLSession sharedSession];   NSURL * fullURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", host, shoplisturl]];   NSMutableURLR
    //网络请求
       
    NSURLSession * mySession = [NSURLSession sharedSession];
       
    NSURL * fullURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", host, shoplisturl]];
       
    NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:fullURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:7.0];
        request.
    HTTPMethod = @"POST";
        [request
    addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
       
    NSString * paramStr = [NSString stringWithFormat:@"cate_id=%@&business=%@&p=%@&sort=%@&num=%@&recommend=%@&keyword=%@&lng_lat=%@&uid=%@&token=%@",cateID,businessID,page,sort,num,recommend,keyword,lng_lat,userID,token];
        request.
    HTTPBody = [paramStr dataUsingEncoding:NSUTF8StringEncoding];
       
    NSURLSessionDataTask * task = [mySession dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
           
    //判断接口是否成功返回
           
    if (error) {
               
    //接口访问失败
               
    NSLog(@"error:%@",error.localizedDescription);
               
    NSLog(@"%s",__func__);
               
               
    NSInteger status = 0;
               
               
    if (callback) {
                    callback(status,
    @"网络不给力");
                }
            }
    else
            {
               
    //接口访问成功
               
    //JSON解析
               
    NSError * parseError1 = nil;
               
    NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&parseError1];
               
    if (parseError1) {
                   
    NSLog(@"JSON解析错误");
                   
    return;
                }
               
    NSLog(@"data:%@", dic);
               
               
    NSArray *dataArray = [dic objectForKey:@"info"];
               
    NSInteger status = [[dic objectForKey:@"status"] integerValue];
               
    if (status == 1) {
                   
    if (callback) {
                       
    dispatch_async(dispatch_get_main_queue(), ^{
                            callback(status,dataArray);
                        });
                    }
                }
    else{
    //                [self showHUDInWindowJustWithText:[dic objectForKey:@"info"] disMissAfterDelay:1.0];
                   
                   
    if (callback) {
                       
    dispatch_async(dispatch_get_main_queue(), ^{
                            callback(status,
    nil);
                        });
                    }
                }
            }
           
        }];
        [task resume];
    展开全文
  • iOS9 以后的POST请求

    2019-03-20 11:21:15
    iOS 原生数据请求 @param url url @param dic 参数 @param isPost 是否为POSt @param success 成功 @param failure 失败 */ +(void)httpByUrl:(NSString *)url dic:(NSDictionary *)dic isPost...
    /**
     iOS 原生数据请求
    
     @param url url
     @param dic 参数
     @param isPost 是否为POSt
     @param success 成功
     @param failure 失败
     */
    +(void)httpByUrl:(NSString *)url
                 dic:(NSDictionary *)dic
              isPost:(BOOL)isPost
             success:(void (^)(id responseObject))success
             failure:(void(^)(NSError *error))failure
    {
        // 1、创建URL
        NSURL *urls = [NSURL URLWithString:url];
        
        // 2、创建请求对象
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:urls];
        
        if (isPost == YES) {
            [request setHTTPMethod:@"POST"];
            NSString *send= [self dealWithParam:dic];
            // 3、设置body
            NSData *bodyData = [send dataUsingEncoding:NSUTF8StringEncoding];
            [request setHTTPBody:bodyData];
        }
        else
        {
            [request setHTTPMethod:@"GET"];
        }
        // 4、创建会话
        NSURLSession *session = [NSURLSession sharedSession];
        // 5、创建数据请求任务
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *_Nullable data,NSURLResponse * _Nullable response,NSError * _Nullable error) {
            dispatch_async(dispatch_get_main_queue(), ^{
                
                if (error)
                {
                    failure(error);
                }
                else
                {
                    
                    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                    
                    if (dic)
                    {
                        success(dic);
                    }
                    else
                    {
                        failure(error);
                    }
                    
                }
            });
        }];
        
        // 6、启动任务
        [task resume];
        
    }
    
    // 处理字典参数
    + (NSString *)dealWithParam:(NSDictionary *)param
    {
        NSArray *allkeys = [param allKeys];
        
        NSMutableString *result = [NSMutableString string];
        
        for (NSString *key in allkeys)
        {
            
            NSString *str = [NSString stringWithFormat:@"%@=%@&",key,param[key]];
            
            [result appendString:str];
        }
        
        return [result substringWithRange:NSMakeRange(0, result.length-1)];
        
    }

     

    展开全文
  • iOS 原生网络请求

    2017-11-21 09:42:44
    1、 同步GET请求    //第一步,创建URL    NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];        //第二步,通过
    https://www.cnblogs.com/ficow/p/5034993.html
    
    
    
    1、     同步GET请求
     
        //第一步,创建URL
     
        NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
     
         
     
        //第二步,通过URL创建网络请求
     
        NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
     
        //NSURLRequest初始化方法第一个参数:请求访问路径,第二个参数:缓存协议,第三个参数:网络请求超时时间(秒)
     
          其中缓存协议是个枚举类型包含:
     
          NSURLRequestUseProtocolCachePolicy(基础策略)
     
          NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
     
          NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)
     
          NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作)
     
          NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载)
     
          NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载)
     
        //第三步,连接服务器
     
        NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
     
         
     
        NSString *str = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
     
         
     
        NSLog(@"%@",str);
     
    2、同步POST请求
     
        //第一步,创建URL
     
        NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];
     
        //第二步,创建请求
     
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
     
        [request setHTTPMethod:@"POST"];//设置请求方式为POST,默认为GET
     
        NSString *str = @"type=focus-c";//设置参数
     
        NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
     
        [request setHTTPBody:data];
     
        //第三步,连接服务器
     
         
     
        NSData *received = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
     
         
     
        NSString *str1 = [[NSString alloc]initWithData:received encoding:NSUTF8StringEncoding];
     
         
     
        NSLog(@"%@",str1);
    3、异步GET请求
     
        //第一步,创建url
     
        NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
     
        //第二步,创建请求
     
        NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
     
        //第三步,连接服务器
     
        NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
    4、异步POST请求
     
        //第一步,创建url
     
        NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];
     
        //第二步,创建请求
     
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
     
        [request setHTTPMethod:@"POST"];
     
        NSString *str = @"type=focus-c";
     
        NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
     
        [request setHTTPBody:data];
     
        //第三步,连接服务器
     
        NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
     
    5、异步请求的代理方法
     
    //接收到服务器回应的时候调用此方法
     
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
     
    {
     
        NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
     
        NSLog(@"%@",[res allHeaderFields]);
     
        self.receiveData = [NSMutableData data];                           
     
    }
     
    //接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次
     
    -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
     
    {
     
        [self.receiveData appendData:data];
     
    }
     
    //数据传完之后调用此方法
     
    -(void)connectionDidFinishLoading:(NSURLConnection *)connection
     
    {
     
        NSString *receiveStr = [[NSString alloc]initWithData:self.receiveData encoding:NSUTF8StringEncoding];
     
        NSLog(@"%@",receiveStr);
     
    }
     
    //网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法
     
    -(void)connection:(NSURLConnection *)connection
     
     didFailWithError:(NSError *)error
     
    {
     
        NSLog(@"%@",[error localizedDescription]);
    
    }
    展开全文
  • IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的。  在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装例子。我这里要给出的封装代码,是异步的,...
  • iOS开发——post异步网络请求封装  IOS中有许多网络请求的函数,同步的,异步的,通过delegate异步回调的。  在做一个项目的时候,上网看了很多别人的例子,发现都没有一个简单的,方便的异步请求的封装...
  • 我之前在做文件上传的时候,不想用第三方的,于是就写了一个简单的图片上传方法 ... * 异步上传文件,视频,图片  *  * @param name 名字 这个名字是和后台协定好的关键字  * @param filename 上传文件的名字
  • 原生API NSURLConnection 网络请求
  • iOS 网络请求 笔记

    2016-07-22 15:10:59
    一、url请求网络请求的组成部分有服务器地址、请求参数,以及请求方式。在iOS中,一个网络请求用NSURLRequest(或者其子类NSURLMutableRequest)来表示。NSURLRequest适合于get请求,NSURLMutableRequest可以是post...
  • 如果还只会JQ中的AJAX接口,而不知道底层,感觉有点辣鸡,所以自己用底层XMLHttpRequest对象去访问服务器。 那么直奔主题吧 前端代码:(这里唯一的缺点是,发送的数据格式跟JQ的不太一样,估计JQ做了处理) ...
  • 在这篇博客中,我将用苹果自带的网络请求方式(不使用第三方框架)下对iOS网络请求方法做一个汇总。我将在之后的博客中介绍使用AFNetworking框架进行请求的实现。代码已经上传至:...
  • iOS原生网络请求

    2018-11-11 13:20:51
    ... 1、 同步GET请求    //第一步,创建URL    NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];        //第二步,通过URL...
  • 一般服务器上传数据一般都是用POST请求,这样通过AFNetworking的POST请求稳稳的,但是有一天遇到一个问题,服务器上传数据用的是PUT请求,发现用AFNetworking并不是那么好用,今天就来讲一下如何通过PUT请求上传数据...
  • 一、什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)   JSON的格式很像OC中的字典...标准JSON格式的注意点:key必须
  • iOS中,发送Http请求的方式有两种:  1:使用苹果原生:  NSURLConnection:用法简单  NSURLSession:ios7退出的新技术,比NSURLConnection更强大
  • Ajax全名为Asynchronous JavaScript And XML,Ajax 允许通过与场景后面的 Web 服务器交换数据来异步更新网页。这意味着可以更新网页的部分,而不需要重新加载整个页面。 归纳一下发送HTTP请求的技术方法大全
  • iOS中的HTTP请求处理

    2016-12-24 12:38:47
    IOS中的HTTP请求处理 ... 1、定义 ...HTTP完整通信过程:请求行、请求头、请求体 ...1、请求(客户端到服务端) ...请求头(描述客户端信息) ...请求体(POST请求才有,存放具体数据) 2、响应(服务端到客户端)
  • Ajax的产生主要是因为在没有异步请求的时候,网络使用的都是同步请求,设想一下你在填写银行办卡的业务表单,花费了十几分钟好不容易写完了发送同步请求到服务器提交表单,但因为同步请求的特性,在上传以及服务器...
1 2 3 4 5 ... 20
收藏数 3,652
精华内容 1,460
关键字:

9原生post异步请求 ios