• NSURLConnection发送GET请求


      1 //  ViewController.m
      2 //  04-掌握-NSURLConnection发送GET请求
      3 //
      4 //  Created by xiaomage on 16/2/22.
      5 //  Copyright © 2016年 小码哥. All rights reserved.
      6 //
      7 
      8 #import "ViewController.h"
      9 
     10 @interface ViewController ()<NSURLConnectionDataDelegate>
     11 /** 注释 */
     12 @property (nonatomic, strong) NSMutableData *resultData;
     13 @end
     14 
     15 @implementation ViewController
     16 
     17 #pragma mark ----------------------
     18 #pragma mark lazy loading
     19 -(NSMutableData *)resultData
     20 {
     21     if (_resultData == nil) {
     22         _resultData = [NSMutableData data];
     23     }
     24     return _resultData;
     25 }
     26 #pragma mark ----------------------
     27 #pragma mark Events
     28 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
     29 {
     30     [self delegate];
     31 }
     32 
     33 /*
     34  请求:请求头(NSURLRequest默认包含)+请求体(GET没有)
     35  响应:响应头(真实类型--->NSHTTPURLResponse)+响应体(要解析的数据)
     36  */
     37 #pragma mark ----------------------
     38 #pragma mark Methods
     39 -(void)sync
     40 {
     41     /*
     42      GET:http://120.25.226.186:32812/login?username=123&pwd=456&type=JSON
     43      协议+主机地址+接口名称+?+参数1&参数2&参数3
     44      post:http://120.25.226.186:32812/login
     45      协议+主机地址+接口名称
     46      */
     47     //GET,没有请求体
     48     //1.确定请求路径
     49     NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];
     50     
     51     //2.创建请求对象
     52     //请求头不需要设置(默认的请求头)
     53     //请求方法--->默认为GET
     54     NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
     55     
     56     //3.发送请求
     57     //真实类型:NSHTTPURLResponse
     58     NSHTTPURLResponse *response = nil;
     59     /*
     60      第一个参数:请求对象
     61      第二个参数:响应头信息
     62      第三个参数:错误信息
     63      返回值:响应体
     64      */
     65     //该方法是阻塞的,即如果该方法没有执行完则后面的代码将得不到执行
     66     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
     67     
     68     //4.解析 data--->字符串
     69     //NSUTF8StringEncoding
     70     NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
     71     
     72     NSLog(@"%zd",response.statusCode);
     73 }
     74 
     75 -(void)async
     76 {
     77     //1.确定请求路径
     78     NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520it&type=JSON"];
     79     
     80     //2.创建请求对象
     81     //请求头不需要设置(默认的请求头)
     82     NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
     83     
     84     //3.发送异步请求
     85     /*
     86      第一个参数:请求对象
     87      第二个参数:队列 决定代码块completionHandler的调用线程
     88      第三个参数:completionHandler 当请求完成(成功|失败)的时候回调
     89         response:响应头
     90         data:响应体
     91         connectionError:错误信息
     92      */
     93     [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
     94         
     95        
     96         //4.解析数据
     97         NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
     98         
     99         NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
    100         NSLog(@"%zd",res.statusCode);
    101         NSLog(@"%@",[NSThread currentThread]);
    102     }];
    103 }
    104 
    105 -(void)delegate
    106 {
    107     //1.确定请求路径
    108     NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=123&pwd=123&type=JSON"];
    109     
    110     //2.创建请求对象
    111     NSURLRequest *request = [NSURLRequest requestWithURL:url];
    112     
    113     //3.设置代理,发送请求
    114     //3.1
    115     //[NSURLConnection connectionWithRequest:request delegate:self];
    116     
    117     //3.2
    118     //[[NSURLConnection alloc]initWithRequest:request delegate:self];
    119     
    120     //3.3 设置代理,时候发送请求需要检查startImmediately的值
    121     //(startImmediately == YES 会发送 | startImmediately == NO 则需要调用start方法)
    122     NSURLConnection * connect = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];
    123     
    124     //调用开始方法
    125     [connect start];
    126     
    127 //    [connect cancel];//取消
    128 }
    129 
    130 #pragma mark ----------------------
    131 #pragma mark NSURLConnectionDataDelegate
    132 //1.当接收到服务器响应的时候调用
    133 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    134 {
    135     NSLog(@"%s",__func__);
    136 }
    137 
    138 //2.接收到服务器返回数据的时候调用,调用多次
    139 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    140 {
    141      NSLog(@"%s",__func__);
    142     
    143     //拼接数据
    144     [self.resultData appendData:data];
    145 }
    146 //3.当请求失败的时候调用
    147 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    148 {
    149      NSLog(@"%s",__func__);
    150 }
    151 
    152 //4.请求结束的时候调用
    153 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
    154 {
    155      NSLog(@"%s",__func__);
    156     
    157     NSLog(@"%@",[[NSString alloc]initWithData:self.resultData encoding:NSUTF8StringEncoding]);
    158 }
    159 @end
    View Code
  • 相关阅读:
    [bzoj1576] [Usaco2009 Jan]安全路经Travel
    [坑][poj2396]有上下界的最大流
    bzoj1458 士兵占领
    [Ahoi2013]差异
    bzoj2424 [HAOI2010]订货
    bzoj1741 [Usaco2005 nov]Asteroids 穿越小行星群
    bzoj2251 [2010Beijing Wc]外星联络
    bzoj1977 [BeiJing2010组队]次小生成树 Tree
    bzoj2729 [HNOI2012]排队
    bzoj1925 [Sdoi2010]地精部落
  • 原文地址:https://www.cnblogs.com/seeworld/p/6002179.html
Copyright © 2020-2023  润新知