ios object_c网络post和get的个人见解

我做为一个新手,刚开始在这一块知识点上,也是纠结了挺长时间的。通过不断的测试,不断的参考,才逐步的实现了post和get的功能。

            好了,个人觉得,如果学这一个,没有一点点的网络基础知识的话,可能就会看得一脸糊涂。所以在这里我先从网络方面讲解,希望各位看到了,都有所收获。

本人也是一名新手,如有错误,请大神提出,好让我学习学习!在此谢谢大神!也是我第一次写博客,可能排版不好,请大家谅解!




首先,先讲一下什么是客户端,什么是服务器。

1、客户端,其实就是我们日常所使用的一切与网络有连接的软件、游戏等等。客户端就是接受服务器发出来的数据进行解析,然后显示到UI界面上,让人可以看得见的东西。

所以客户端有可能是电脑上面的软件,或者手机上面的软件。

1、服务器,其实就是日常我们网络中数据的交互,就是靠着服务器的。服务器正确的来说,有可能是一台电脑,也有可能是手机。只是他操作的东西与我们日常使用的时候不一样。所用的系统等等都是不一样而已。但是实质上基本都是一样的。个人电脑也能做服务器,个人手机也能做服务器。



第二个我们来讲一下URL。

URL是一个什么东西呢?其实一说,大家都感觉很熟悉,但是又很陌生,这是因为URL很多东西都见过,或者某个教程,或者某本书。但是听说,看过,却不太懂是什么意思。

这里我就来说一下这个东西,URL的全称是唯一资源定位符。为什么叫唯一呢?因为每个服务器的地址不同,服务器上面的资源也是不一样的,所以才有一个唯一这一个词。

至于资源定位符又该怎么理解呢?其实就等于打开我的电脑,点击D盘再打开一个文件或者软件一样。因为每一个网页其实就是一个html的文件,当你点击网页上面的某一个跳转文字的时候,他自动帮你找到服务器上面相应的某个盘某个文件夹上面的某个html文件而已。所以就称为资源定位符,就是定位服务器上面的某个文件的位置。



第三个讲一下数据库的最基本概念。

数据库,顾名思义就是存储数据的,是放在服务器上面的,那他存储什么数据呢?它存储的就是一些比如你玩游戏里面个人信息,等级,名字等等。就是存储这些数据,所以post和get的功能就是从服务器上面修改某个数据或者得到某个数据的值,然后通过客户端,以UI界面的方式呈现给大家看,而且是看得懂的东西(为什么说看得懂呢?因为服务器传输出来的数据是通过http传输的,但是http传输数据是要遵循一定的协议,而协议有很多,不同协议传输的数据格式都是不一样的,比如我是用json传输的,如果不通过解析json数据,你看到的是一堆类似乱码的东西)。而数据库存储的就是一个一个的表。我们的数据就是存放在这些表里面,所以修改、上传或者读取数据,都是从这些表里面得出来的。通常服务器会给出一些接口,也就是API,这些接口会给出参数给你。当你按照这些参数传值上去服务器的话,服务器会相应的把这些数据转化为表里的数据。


来说一下同步传输和异步传输的概念,同步传输其实就是当你一个APP在运行的时候,如果你向网络发出请求,但是因为网络不好,或者网络延时的话。你的手机就会卡在这个APP,也就是崩溃了,因为同步传输是在单线程运行的。而异步就刚好优化了这个问题,异步是多线程的,也就是说不管网络不好或者网络延迟也好,APP也能单独的运行,而不会影响到手机的运行,也不会出现崩溃的情况。


下面我们来说一下代码的实现把。

首先说一下GET的实现方法,GET是用作获取你想从服务器里面得到的信息,也可以上传数据,但是GET上传数据是不安全的,全面暴露出来,一旦有人截取这些数据后,就能直接看到你发送的内容,特别是一些开发里面涉及到密码账户等等,最好不要使用GET的方式。所以GET方式最常用是用来获取服务器的相关信息。


服务器和客户端的连接是怎么样的呢?首先客户端会想服务器发出一个请求,如果服务器收到了这个请求后,它会根据这个请求作出相应的响应。要么就是返回数据,要么就是确认客户端发出的请求。



同步GET

  

    NSURL *url = [NSURL URLWithString:@"http://lizhooh.top/api/index.php/api/getCourseList"];//创建URL
    //首先我们得创建一个URL,因为我们得找到服务器相应的位置和资源。 

    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];//创建请求对象
    //接着我们这里创建了一个请求对象,请求对象其实就是想服务器发出请求的对象,让服务器响应。
    NSData *data = [NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];//数据请求
    // 我们利用一个NSData的变量data接受服务器向客户端返回的数据。然后保存在data里面。
    NSDictionary *dir = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    //把网页的原始数据解析出来并保存在字典里面,这里说的是json数据解析
    NSString *zhuanma = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    //把字典里面的数据转化为我们能看得懂的中文或者英文。
    NSLog(@"%@",zhuanma);//打印测试数据是否成功获取


同步POST

其实同步POST和同步GET十分的类似,只是POST需要设置数据包的body还有设置http的传输方法。

#define POSTBODY @"cno=55555&name=哈哈哈&time=100课时"

NSURL *url = [NSURL URLWithString:@"http://lizhooh.top/api/index.php/api/addCourse"];
    // 创建request对象,跟上面GET一样,为了知道服务器的相应文职
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    // 然后初始化请求对象,向服务器发送请求的对象,个人觉得是数据包。
    // 设置http的发送发放为POST,因为默认是GET,所以要设置一下,而且要注意一定要大写。
    [request setHTTPMethod:@"POST"];
    // 设置http的body,即一个数据包里面的身体。也就是说你要上传的数据。并且要转成json数据。所以使用了NSUTF8StringEncoding编码
    NSData *data = [POSTBODY dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:data];
    // 开始发送请求,并把服务器返回的数据放到data变量里面
    NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

这里POST我是使用上传数据的方法,其实POST也可以用来获取数据,但是一般用作上传数据。


异步GET

多线程运行,避免崩溃现象

这里为了避免网络上有些人说GET不能作为上传数据,所以这一个实例是数据上传的实例,使用GET的方式。

 NSURL *rul = [NSURL URLWithString:@"http://lizhooh.top/api/index.php/api/addCourse?cno=10004"];
    NSURLRequest *req = [[NSURLRequest alloc]initWithURL:rul cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
   //其实代码就是在这里写成了异步处理而已。而且用了一个回调,用来检测是否出现错误。
 [NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] 
   completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if (connectionError==0) {
            NSLog(@"没错");
        }
        else
            NSLog(@"报错");
        NSLog(@"%@",connectionError);


异步POST

异步POST和异步GET十分类似,大家都可以参考一下。基本的代码都差不多的。


 NSURL *url = [NSURL URLWithString:@"http://lizhooh.top/api/index.php/api/addCourse"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"POST"];
    request.HTTPBody = [@"cno=18888&name=HELLO&time=64课时" dataUsingEncoding:NSUTF8StringEncoding];
    //request.HTTPBody = [@"cno=30001&name='移动通讯'&time='30课时'" dataUsingEncoding:NSUTF8StringEncoding];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        if(connectionError==nil)
        {
            //NSLog(@"%@",response);
            NSLog(@"chenggong");
            /*NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@",string);*/
        }
        else
        {
            NSLog(@"shibai");
            NSLog(@"%@",connectionError);
        }
    }];

谢谢大家这么有耐心的看到这里,若有什么错误,请留言提出,或者有什么问题,也可以留言一起讨论一下!

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值