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启动监控

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。