zoukankan      html  css  js  c++  java
  • 第十六讲.网络编程 (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或者返回数据

     
  • 相关阅读:
    教程:在 Visual Studio 中开始使用 Flask Web 框架
    教程:Visual Studio 中的 Django Web 框架入门
    vs2017下发现解决python运行出现‘No module named "XXX""的解决办法
    《sqlite权威指南》读书笔记 (一)
    SQL Server手工插入标识列
    hdu 3729 I'm Telling the Truth 二分图匹配
    HDU 3065 AC自动机 裸题
    hdu 3720 Arranging Your Team 枚举
    virtualbox 虚拟3台虚拟机搭建hadoop集群
    sqlserver 数据行统计,秒查语句
  • 原文地址:https://www.cnblogs.com/erdeng/p/4850151.html
Copyright © 2011-2022 走看看