一、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或者返回数据