用NSURLConnection发送同步/异步/代理请求(GET请求)

Posted on 2016-07-19 15:13  柠檬片  阅读(128)  评论(0)    收藏  举报

1.同步请求

 1 -(void)sync
 2 {
 3     //1.确定请求路径
 4     NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520&type=JSON"];
 5     
 6     //2.创建请求对象
 7     /*
 8      url:请求路径
 9      */
10     NSURLRequest *request = [NSURLRequest requestWithURL:url];
11     
12     //3.NSURLConnection发送同步请求
13     /*
14      第一个参数:请求对象
15      第二个参数:响应头
16      第三个参数:错误信息
17      返回值:响应体
18      注意点:sendSynchronousRequest会卡主线程
19      */
20     NSURLResponse *response = nil;
21     NSError *error = nil;
22     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
23     
24     NSLog(@"---------%@",response);
25     
26     //    NSLog(@"%zd--",data.length);
27     //4.解析数据
28     NSString *res = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
29     NSLog(@"%@",res);
30 
31 }
示例

 

2.异步请求

 1 -(void)async
 2 {
 3     //1.确定请求路径
 4     NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=520it&pwd=520&type=JSON"];
 5     
 6     //2.创建请求对象
 7     /*
 8      url:请求路径
 9      默认GET方法
10      */
11     NSURLRequest *request = [NSURLRequest requestWithURL:url];
12     
13     //3.NSURLConnection发送异步请求
14     /*
15      第一个参数:请求对象
16      第二个参数:队列,
17      第三个参数:当请求结束之后会调用该block
18      response:响应头
19      data:响应体
20      connectionError:如果请求失败那么error有值
21      */
22     [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
23         
24         if (connectionError) {
25             NSLog(@"请求失败");
26         }else
27         {
28             NSHTTPURLResponse *respon = (NSHTTPURLResponse *)response;
29             NSLog(@"%zd--%@",respon.statusCode,respon.allHeaderFields);
30             
31             //当请求结束之后会调用该block
32             //4.解析数据
33             NSString *res = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
34             NSLog(@"%@---%@",res,[NSThread currentThread]);
35         }
36         
37     }];
38 }
示例

 

3.代理请求

 1 -(void)delegate
 2 {
 3     //1.确定请求路径
 4     NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_02.png"];
 5     
 6     //2.创建请求对象
 7     NSURLRequest *request = [NSURLRequest requestWithURL:url];
 8     
 9     //3.设置代理,发送异步请求
10     //第一种
11     //    [NSURLConnection connectionWithRequest:request delegate:self];
12     //第二种
13     //   NSURLConnection *connt =  [[NSURLConnection alloc]initWithRequest:request delegate:self];
14     
15     NSURLConnection *connt =  [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];
16     
17     [connt start];
18 }
19 
20 #pragma mark  NSURLConnectionDataDelegate  start------
21 /*
22  1.当接收到服务器响应的时候调用
23  */
24 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
25 {
26     NSLog(@"---didReceiveResponse-");
27 }
28 
29 /*
30  2.当接收到服务器返回数据的时候调用,会被调用多次
31  */
32 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
33 {
34     NSLog(@"---didReceiveData-%zd",data.length);
35 }
36 
37 /*
38  3.当请求结束之后调用
39  */
40 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
41 {
42     NSLog(@"---connectionDidFinishLoading-");
43 }
44 /*
45  3.当请求失败之后调用
46  */
47 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
48 {
49         NSLog(@"---didFailWithError-");
50 }
示例