• 第十六讲.网络编程 (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或者返回数据

     
  • 相关阅读:
    UVALive 4764 简单dp水题(也可以暴力求解)
    poj 2151 概率DP(水)
    poj 2299 归并排序求逆序数 (可做模板)
    poj2388 更水
    poj1936 假期计划第一水
    poj 3080 kmp求解多个字符串的最长公共字串,(数据小,有点小暴力 16ms)
    UVA315:Network(求割点)
    POJ1236:Network of Schools (思维+Tarjan缩点)
    SPOJ
    HDU4305:Lightning(生成树计数+判断点是否在线段上)
  • 原文地址:https://www.cnblogs.com/erdeng/p/4850151.html
Copyright © 2020-2023  润新知