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