zoukankan      html  css  js  c++  java
  • ios开发网络学习AFN框架的使用一:get和post请求

    #import "ViewController.h"
    #import "AFNetworking.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self post];
    }
    
    -(void)get
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //http://120.25.226.186:32812/login?username=123&pwd=122&type=JSON
        //
        
        NSDictionary *paramDict = @{
                                    @"username":@"520it",
                                    @"pwd":@"520it",
                                    @"type":@"JSON"
                                    };
        //2.发送GET请求
        /*
         第一个参数:请求路径(不包含参数).NSString
         第二个参数:字典(发送给服务器的数据~参数)
         第三个参数:progress 进度回调
         第四个参数:success 成功回调
                    task:请求任务
                    responseObject:响应体信息(JSON--->OC对象)
         第五个参数:failure 失败回调
                    error:错误信息
         响应头:task.response
         */
        [manager GET:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSLog(@"%@---%@",[responseObject class],responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"请求失败--%@",error);
        }];
    }
    -(void)post
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        NSDictionary *paramDict = @{
                                    @"username":@"520it",
                                    @"pwd":@"520",
                                    @"type":@"JSON"
                                    };
        //2.发送GET请求
        /*
         第一个参数:请求路径(不包含参数).NSString
         第二个参数:字典(发送给服务器的数据~参数)
         第三个参数:progress 进度回调
         第四个参数:success 成功回调
            task:请求任务
            responseObject:响应体信息(JSON--->OC对象)
         第五个参数:failure 失败回调
            error:错误信息
         响应头:task.response
         */
        [manager POST:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSLog(@"%@---%@",[responseObject class],responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"请求失败--%@",error);
        }];
    }
    @end

    ```objc

    AFN结构体

        - NSURLConnection

            + AFURLConnectionOperation(已经被废弃)

            + AFHTTPRequestOperation(已经被废弃)

            + AFHTTPRequestOperationManager(封装了常用的 HTTP 方法)(已经被废弃)

                * 属性

                    * baseURL :AFN建议开发者针对 AFHTTPRequestOperationManager 自定义个一个单例子类,设置 baseURL, 所有的网络访问,都只使用相对路径即可

                    * requestSerializer :请求数据格式/默认是二进制的 HTTP

                    * responseSerializer :响应的数据格式/默认是 JSON 格式

                    * operationQueue

                    * reachabilityManager :网络连接管理器

                * 方法

                    * manager :方便创建管理器的类方法

                    * HTTPRequestOperationWithRequest :在访问服务器时,如果要告诉服务器一些附加信息,都需要在 Request 中设置

                    * GET

                    * POST

        - NSURLSession

            + AFURLSessionManager

            + AFHTTPSessionManager(封装了常用的 HTTP 方法)

                * GET

                * POST

                * UIKit + AFNetworking 分类

                * NSProgress :利用KVO

        - 半自动的序列化&反序列化的功能

            + AFURLRequestSerialization :请求的数据格式/默认是二进制的

            + AFURLResponseSerialization :响应的数据格式/默认是JSON格式

        - 附加功能

            + 安全策略

                * HTTPS

                * AFSecurityPolicy

            + 网络检测

                * 对苹果的网络连接检测做了一个封装

                * AFNetworkReachabilityManager

    建议:

    可以学习下AFN对 UIKit 做了一些分类, 对自己能力提升是非常有帮助的

    ```

    - 0.2 AFN的基本使用

    (1)发送POST请求的方式

    ```objc

    -(void)post

    {

        //1.创建会话管理者

        //AFHTTPSessionManager内部是基于NSURLSession实现的

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

        //2.创建参数

        NSDictionary *dict = @{

                               @"username":@"520it",

                               @"pwd":@"520it",

                               };

        //3.发送POST请求

        /*

         http://120.25.226.186:32812/login?username=ee&pwd=ee&type=JSON

         第一个参数:NSString类型的请求路径,AFN内部会自动将该路径包装为一个url并创建请求对象

         第二个参数:请求参数,以字典的方式传递,AFN内部会判断当前是POST请求还是GET请求,以选择直接拼接还是转换为NSData放到请求体中传递

         第三个参数:进度回调 此处为nil

         第四个参数:请求成功之后回调Block

         第五个参数:请求失败回调Block

         */

        [manager POST:@"http://120.25.226.186:32812/login" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

            //注意:responseObject:请求成功返回的响应结果(AFN内部已经把响应体转换为OC对象,通常是字典或数组)

            NSLog(@"请求成功---%@",responseObject);

        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

            NSLog(@"请求失败---%@",error);

        }];

    }

    ```

  • 相关阅读:
    Bootstrap上传图片
    Mybatis分页插件
    vue从入门到女装??:从零开始搭建后台管理系统(二)用vue-docute生成线上文档
    github提交代码后没有contribution问题
    a标签实现文件下载
    自媒体运营排版利器----Markdown here
    开发wordpress主题
    vue项目安装sass/scss
    vue从入门到女装??:从零开始搭建后台管理系统(一)安装框架
    attr设置checked,disabled等属性失效的问题,jquery的attr和prop的区别
  • 原文地址:https://www.cnblogs.com/cqb-learner/p/5866724.html
Copyright © 2011-2022 走看看