zoukankan      html  css  js  c++  java
  • IOS之AFNetworking的使用

    IOS之AFNetworking的使用

    1.IOS网络请求基础知识

      在谈及AFNetworking的使用前,先简单介绍IOS中网络请求的基础知识.

      1.网络请求的通信过程

      1> 请求

      * 客户端 --> 服务器

      * 请求的内容

      a. 请求行(请求方法HTTP协议请求资源路径)

      b. 请求头(描述客户端的信息)

      c. 请求体(POST请求才需要有, 存放具体数据)

       2> 响应

      * 服务器 --> 客户端

      * 响应的内容

      a. 状态行(响应行, 状态码)

      b. 响应头(服务器信息, 返回数据的类型, 返回数据的长度)

      c. 实体内容(响应体, 返回给客户端的具体内容)

        2.HTTP请求的方法

      1> GET

      * 参数都拼接在URL后面

      * 参数有限制

       2> POST

      * 参数都在请求体

      * 参数没有限制

      3.GET请求和POST的区别

        (1)都是HTTP请求的方式, GET一般只是为了获取数据, 而POST获取的同时上传附加数据

        (2)GET所有参数都在URL网址中, POST请求参数放在请求头中

        (3)应用: 只是简单地获取数据, 使用GET请求,   登录(传密码), 上传文件或图片, 使用POST请求

    2.AFNetworking使用

      可到Git上下载AFNetworking这个第三方库的最新版本,在工程中添加文件以及引用头文件即可使用

      1、GET请求(html、json、xml)

    - (void)testGetRequest{
        NSString *urlString = @"http://www.baidu.com";
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        //注意:默认解析器认为数据是JSON,能解析的类型content-Type也是JSON,responseObject是解析后的字典或数组
        //解决:设置解析器为HTTP形式,下载下来就是NSData
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];
        [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
            NSLog(@"str = %@",str);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"error = %@",error);
        }];
    }

      2、POST请求

    - (void)testPostRequest{
        //POST:    http://quiet.local/testdir/login.php
        //参数1 @"user": @"quiet"
        //参数2 @"password" :@"123"
        
        NSString *urlPost = @"http://quiet.local/testdir/login.php";
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];
        
        //参数1:传入地址 参数2:URL请求的参数,格式传入字典
        //返回数据也需要解析
        [manager POST:urlPost parameters:@{@"user":@"quiet",@"password":@"123"} success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSString *returnStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
            NSLog(@"return str = %@",returnStr);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"error = %@",error);
        }];
    
    }

      3、上传文件

    - (void)testUpLoadFile{
        //http://quiet.local/uploadtest/upload.php
        NSString *upLoadStr = @"http://23.231.10.61/server/";
        //参数1:imager:参数值即为图片
        
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];
        
        [manager POST:upLoadStr parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            //把上传的数据附加到请求体中
            NSString *strPath = [[NSBundle mainBundle] pathForResource:@"zhongzi" ofType:@"zip"];
            [strPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
            NSURL *url = [NSURL fileURLWithPath:strPath];
            //本地路径的初始化
            //参数1:作为接口的key存在
            //参数2:上传后的文件名
            //参数3:mimeType根据上传的文件类型而改变
            [formData appendPartWithFileURL:url name:@"file" fileName:@"zhongzi3.zip" mimeType:@"application/x-gzip" error:nil];
        } success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSString *fileStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
            NSLog(@"fileStr = %@",fileStr);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"error = %@",error);
        }];
    }

      4、下载文件

    - (void)testDownLoadFile{
        NSString *strDownLoad = @"http://imgcache.qq.com/club/item/avatar/zip/7/i87/all.zip";
        
        //创建会话管理器对象(通过默认配置)
        AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
        
        NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:strDownLoad]] progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
                //设置文件的保存路径
                NSString *strPath2 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
                NSString *strPath = [NSString stringWithFormat:@"%@/all.zip",strPath2];
                return [NSURL fileURLWithPath:strPath];
            //本地路径
        } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
                NSLog(@"DownLoad Success");
        }];
        
        [task resume];
    }

      注意:文件的下载是通过NSURLSession的子类NSURLSessionDownLoadTask完成的,所以执行下载记得启动任务---[task resume]

      5、监控网络

    - (void)testMonitorNetWorkStatus{
        AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"www.baidu.com"]];
        [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            NSLog(@"状态为 %@",AFStringFromNetworkReachabilityStatus(status));
        }];
        
        [manager.reachabilityManager startMonitoring];
    }

      注意:要调用startMonitoring启动监控

  • 相关阅读:
    微信公众平台开发教程(一) 微信公众账号注册流程
    DNS----域名解析系统
    C#编程总结(九)字符编码
    向大神学习
    C# 正则表达式
    js 正则表达式 取反
    H5 打开App
    Fiddler 过滤器的使用
    Fiddler 默认不能抓取页面信息的问题
    js 元素Dom新建并插入页面createElement
  • 原文地址:https://www.cnblogs.com/sdaman/p/4399400.html
Copyright © 2011-2022 走看看