第十六讲.网络编程 (HTTP协议)

 一、HTTP协议的概念

   1.协议的基本概念: HTTP协议,Hyper Text Transfer Protocol(超⽂文本传输协议)是⽤于从万维网服务器传送超⽂文本到本地浏览器的传输协议,HTTP是 一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。

    2.Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序.


 二、iOS平台如何实现HTTP协议请求

   常用的两种请求方式:GET和POST请求
   注意: 同步是顺序执行,异步:同时去做,互不干扰。
   1.不同点: 1>.给服务器传输数据的方式:  GET:通过网址字符串。 POST:通过data
           2>.传输数据的大小: GET:网址字符串最多255字节。 POST:使用NSData,容量超过1G
           3>.安全性: GET:所有传输给服务器的数据,显示在网址里,类似于密码的明文输入,直接可见。            POST:数据被转成NSData(二进制数据),类似于密码的密文输入,无法直接读取。

   2.连接方式

    同步连接:程序容易出现卡死现象
    异步连接:等待数据返回。
    异步联接有两种实现方式:(1).设置代理,接收数据 (2).实现block

3.第一种请求方式  GET请求(代码演示)

   1>.GET 同步请求

  步骤:(1).地址(NSURL)
       (2).设置请求方式(NSMutableURLRequest)
       (3).设置同步或者异步,用一个NSData接收NSURLConnection请求下来的数据
    有一个问题:容易造成程序卡顿,如果请求的数据偏大,程序会卡一会。

 

 1 /*
 2  步骤:
 3 第一步.地址(NSURL)
 4     NSString 和  NSUrl(请求地址)
 5 
 6 第二步.设置请求方式
 7  NSURLRequest (GET请求可以用这个)
 8   NSMutableURLRequest (在这个地址是GET或POST请求)
 9 
10 第三步.设置同步或异步
11  用一个NSData接收NSURLConnection请求下来的数据
12        NSURLConnection(链接方式  (同步  异步))
13  
14 */
15 
16 
17 //GET同步 请求*************************************
18 //同步按顺序执行  一步一步顺序执行  请求量大时会有卡顿现象  如果请求数据偏大 程序会卡一会
19 
20 - (IBAction)getT:(UIButton *)sender {
21   
22     //第一步   设置 NSString 和  NSUrl(请求地址)
23     NSString *urlStr = @"http://172.21.45.27/?userName=mm&password=123";
24     
25     NSURL *url = [NSURL URLWithString:urlStr];
26     
27     //第二步 设置请求或链接方式
28     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
29     // 设置请求方式  默认是GET的
30     [request setHTTPMethod:@"GET"];
31     
32     
33     //&response 代表指针的指针
34     NSURLResponse *response = nil;
35     
36     NSError *error = nil;
37     
38     //第三步 NSURLConnection 向携带了地址的那个quest发送了一个同步请求  返回一个NSDate
39     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
40     
41    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
42     
43     NSLog(@"%@",dic);
44 
45     self.view.backgroundColor = [UIColor orangeColor];
46     
47 }

 2>.GET 异步请求 (使用代理)

  异步联接有两种实现方式:(1).设置代理,接收数据 (2).实现block

  注意:在异步连接时需要使用代理方法

  步骤: 1:给一个URL
        2:通过NSMutableURLRequest请求URL的数据
        3:通过选择代理或者block来实现异步加载。

 1 //GET异步--------------------------------------------------
 2 // 通过block和代理来实现异步
 3 - (IBAction)getY:(UIButton *)sender {
 4     
 5     //第一步   设置 NSString 和  NSUrl(请求地址)
 6     NSString *urlStr = @"http://172.21.45.27/?userName=mm&password=123";
 7     
 8     NSURL *url = [NSURL URLWithString:urlStr];
 9     
10     //第二步 设置请求或链接方式
11     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
12     //设置请求方式  默认是GET的
13     [request setHTTPMethod:@"GET"];
14     
15     //第三步 NSURLConnection 向携带了地址的那个quest发送了一个同步请求  返回一个NSDate
//同时使用代理或block来是吸纳异步加载
16 NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 17 18 [connection start]; 19 20 } 21 22 //设置NSURLConnection代理 实现相应的代理⽅方法:开始响应接收数据、接收数据、成功、失败 23 //开始发送请求 24 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 25 { 26 NSLog(@"开始发送请求"); 27 //放在这里初始化 确保每次网络请求时保证data都是空的 28 self.data = [NSMutableData data]; 29 30 } 31 32 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 33 { 34 NSLog(@"%@",data); 35 36 //防止一段一段数据的发生 所以直接拼接到后面 37 [self.data appendData:data]; 38 39 } 40 -(void)connectionDidFinishLoading:(NSURLConnection *)connection 41 { 42 NSLog(@"结束网络请求"); 43 NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:self.data options:NSJSONReadingAllowFragments error:nil]; 44 45 NSLog(@"%@",dic); 46 47 } 48 49 //抛出异常 50 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 51 { 52 53 54 55 }

4.第二种请求方式  POST请求(代码演示)

  1>.POST同步请求

 1 //POST请求同步------------------------------------------
 2 //POST请求在发起链接时,和GET没有区别    使用Data
 3 - (IBAction)postT:(UIButton *)sender {
 4     
 5     NSString *urlStr =  @"http://172.21.45.27/index.php";
 6     
 7     NSURL *url = [NSURL URLWithString:urlStr];
 8     
 9     //设置链接方式
10     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
11     
12     
13     //NSString 转化成Data 和  Data转化为NSString ***********
14     NSString *parmarStr = @"userName=mm&password=123";
15     //POST 请求的body一定要通过UTF-8进行转码
16     NSData *parmarData = [parmarStr dataUsingEncoding:NSUTF8StringEncoding];
17     
18     
19     //  把Data 转化为String  ***************
20 //    NSString *newSte = [[NSString alloc] initWithData:<#(NSData *)#> encoding:<#(NSStringEncoding)#>]
21     
22     
23     [request setHTTPMethod:@"POST"];
24     
25     //body在使用中  POST和GET的最大区别 GET不需要body(data)  而POST则需要
26     [request setHTTPBody:parmarData];
27     
28     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
29     
30     NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
31     
32     NSLog(@"%@",dic);
33 
34   
35 }

  2>.POST异步请求(使用block)

 1 //POST异步请求------------------------------------------
 2 - (IBAction)postY:(UIButton *)sender {
 3     
 4     NSString *urlStr =  @"http://172.21.49.148/index.php";
 5     
 6     NSURL *url = [NSURL URLWithString:urlStr];
 7     
 8     //设置链接方式
 9     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
10     
11 
12     //NSString 转化成Data 和  Data转化为NSString ***********
13     NSString *parmarStr = @"userName=mm&password=123";
14     //POST 请求的body一定要通过UTF-8进行转码
15     NSData *parmarData = [parmarStr dataUsingEncoding:NSUTF8StringEncoding];
16     
17     
18     //  把Data 转化为String  ***************
19     //    NSString *newSte = [[NSString alloc] initWithData:<#(NSData *)#> encoding:<#(NSStringEncoding)#>]
20     
21     
22     [request setHTTPMethod:@"POST"];
23     
24     [request setHTTPBody:parmarData];
25     
26     //block回调形式的异步网络请求
27     //[NSOperationQueue mainQueue] 回到主线程
28     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
29         
30         //使用JSON解析数据
31         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
32         
33         NSLog(@"%@",dic);
34         
35     }];
36 
37   
38 }

三、服务器接口的简单介绍

   1>.网络请求方式分为:GET、POST,是由服务器的实现方式决定,分为:GET, POST,  GET或POST

   2>.服务器端PHP简单接口
      PHP中使用不同的函数获取数据,支持不同的请求方式:

      GET请求:使用 $_GET[“key"] 获取数据网址中的数据

      POST请求:使用 $_POST[“key"] 获取上传data中的数据

      GET、POST请求:使用 $_REQUEST[“key"] 获取数据

   3>.完成与PHP接口的交互
       在iOS平台使用NSURL、NSURLRequest等对象完成与接口的交互

 四.总结


    GET请求方式、POST是请求方式
     同步、异步是连接方式
     网络请求的步骤:1、NSURL;   2、NSURLRequest;   3、 NSURLConnection;    4、处理Error或者返回数据

 
原文地址:https://www.cnblogs.com/erdeng/p/4850151.html