·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> iOS网络编程

iOS网络编程

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

iOS 开发中所需的数据基本都是来自网络,网络数据请求是 iOS 编程中必不可少的,应该熟练掌握网络请求.

网络请求方式有 :GET , POST , PUT ,DELETE 等,其中常用的就是 GET,POST . GET 和 POST 请求存在着不同,GET 将数据参数跟在 URL 后面,POST 参数放在 body 中,不可见.

数据请求方式分为同步请求和异步请求,其中常用的是异步请求,异步请求避免了因组线程阻塞而造成的崩溃.这里主要说下异步请求.

1.GET 同步请求 用 NSURLConnection 实现:

  步骤:建立 request ----> 建立衔接请求数据 ------> 解析数据

代码:

 1 #PRagma mark --- get 同步 ---
 2 - (IBAction)getOne:(id)sender {
 3     self.allNewsArray = [[NSMutableArray alloc]init];
 4     //url 地址
 5     NSURL *url = [NSURL URLWithString:PATH];
 6     //请求
 7     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 8     //建立衔接请求数据
 9     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
10     //如果数据不为空就解析
11     if (data) {
12         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil];
13         //处理数据,用 model 存储
14         for (NSDictionary *dic1 in [dic objectForKey:@"news"]) {
15             NewsModel *model = [[NewsModel alloc]init];
16             [model setValuesForKeysWithDictionary:dic1];
17             [self.allNewsArray addObject:model];
18         }
19         
20     }
21 }

2.GET 异步请求 BLOCK 形式 用 NSURLConnection 实现

 1 #pragma mark --- get 异步请求 ---
 2 - (IBAction)getTwo:(id)sender {
 3     
 4     self.allNewsArray = [[NSMutableArray alloc]init];
 5     //url 地址
 6     NSURL *url = [NSURL URLWithString:PATH];
 7     //请求
 8     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
 9    //默认是 get 方法,如果是 get 方法可以不写
10     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
11         if (data) {
12             NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
13             //处理数据,用 model 存储
14             for (NSDictionary *dic1 in [dic objectForKey:@"news"]) {
15                 NewsModel *model = [[NewsModel alloc]init];
16                 [model setValuesForKeysWithDictionary:dic1];
17                 [self.allNewsArray addObject:model];
18             }
19         }
20         
21     }];
22 }

3.POST 异步请求 BLOCK 形式:用 NSURLConnection 实现

 

 1 #pragma mark --- POST 异步 Block 形式 ---
 2 - (IBAction)POSTBlock:(id)sender {
 3     
 4     NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
 5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
 6     
 7     //制作包体
 8     NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
 9     
10     NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding];
11     
12     //设置请求方式
13     [request setHTTPMethod:@"POST"];
14     //设置 body
15     [request setHTTPBody:data];
16     [request setTimeoutInterval:60];
17     
18     
19     //建立连接.请求数据
20     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
21         
22         //解析数据
23         if (data) {
24             NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
25             //处理数据,用 model 存储
26             for (NSDictionary *dic1 in [dic objectForKey:@"news"]) {
27                 NewsModel *model = [[NewsModel alloc]init];
28                 [model setValuesForKeysWithDictionary:dic1];
29                 [self.allNewsArray addObject:model];
30             }
31         }
32         
33     }];
34    }

 

 

 

4.POST 异步请求 delegate 形式:用 NSURLConnection 实现

 

 1 - (IBAction)POST_Delegate:(id)sender {
 2     
 3     NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
 4     
 5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
 6     
 7     //制作包体
 8     NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
 9     
10     NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding];
11     
12     //设置请求方式
13     [request setHTTPMethod:@"POST"];
14     //设置请求 body
15     [request setHTTPBody:data];
16     
17     //建立连接请求数据
18     NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
19     
20     //启动请求
21     [conn start];
22    }
23 
24 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
25     NSLog(@"接收到响应");
26     
27     self.data = [NSMutableData data];
28     
29 }
30 
31 #pragma mark --- 接收数据的方法 ---
32 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
33     [self.data appendData:data];
34 }
35 
36 #pragma mark --- 结束传递数据 ---
37 - (void)connectionDidFinishLoading:(NSURLConnection *)connection{
38     
39     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.data options:1 error:nil];
40     NSLog(@"%@",dic);
41     
42 }
43 
44 
45 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
46     
47 }

 

 

 

5.GET 异步请求 session 写法

 

 1 #pragma mark --- GET Session 写法 ---
 2 - (IBAction)session:(id)sender {
 3     
 4     //创建 session 对象
 5     NSURLSession *session = [NSURLSession sharedSession];
 6     
 7     NSURL *URL = [NSURL URLWithString:PATH];
 8     
 9     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
10     
11     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
12         
13         if(data){
14             NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
15             
16             NSLog(@"%@",dic);
17         }
18     }];
19     
20     //开始请求 (一定要调用)
21     [task resume];
22 }

 

6.POST 异步请求 BLOCK 形式:用 NSURLSession 实现

 

 1 - (IBAction)POST_Session:(id)sender {
 2     
 3     NSURL *URL = [NSURL URLWithString:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"];
 4     
 5     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
 6     
 7     //制作包体
 8     NSString *param = @"date=20131129&startRecord=1&len=5&udid=1234567890&terminalType=Iphone&cid=213";
 9     
10     NSData *data = [param dataUsingEncoding:NSUTF8StringEncoding];
11     
12     //设置请求方式
13     [request setHTTPMethod:@"POST"];
14     //设置请求 body
15     [request setHTTPBody:data];
16     
17     NSURLSession *session = [NSURLSession sharedSession];
18     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
19         NSLog(@"%@",error);
20         
21         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:1 error:nil];
22         NSLog(@"%@",dic);
23     }];
24     
25     [task resume];
26 }