首页 > 代码库 > ios开发网络学习AFN框架的使用一:get和post请求

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);

    }];

}

```

 

ios开发网络学习AFN框架的使用一:get和post请求