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

时间: 2024-11-05 21:41:45

IOS之AFNetworking的使用的相关文章

IOS -AFNetworking 简介及使用

一AFNetworking简介 AFNetworking是一个在IOS开发中使用非常多网络开源库,适用于iOS以及Mac OS X. 它构建于在(apple ios开发文档)NSURLConnection, NSOperation,以及其他熟悉的Foundation技术之上.它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松. AFURLConnectionOperation:继承自 NSOperation 实现了NSURLConnection 的代理方法. AFHTTPR

iOS—修改AFNetworking源文件可接收text/plain的方法

iOS—修改AFNetworking源文件可接收text/plain的方法 在使用AFNetworking的时候可能会碰到下面的错误: { status code: 200, headers { "Content-Length" = 14; "Content-Type" = "text/plain;charset=utf-8"; Date = "Thu, 22 May 2014 10:37:50 GMT"; Server =

iOS开发:AFNetworking和ASIHTTPRequest的比较

标签: it 网络请求 asihttprequest afnetworking   ASI和AFN以及底层框架的关系  对比 ASI AFN 更新状态 2012年10月份,已经停止更新 持续更新中,目前已更新至2.0版 介绍 ASI的直接操作对象ASIHTTPRequest,是一个实现了了NSCopying协议的NSOperation子类. 在initialize和initWithURL:方法中初始化相关属性并配置一系列请求相关参数默认值.此外,ASIHTTPRequest还提供了一系列的实例方

iOS利用AFNetworking(AFN) 实现图片上传

1.上传图片以二进制流的形式上传 1 #pragma mark - 文件上传  2 - (IBAction)uploadImage  3 {  4     /*  5      此段代码如果需要修改,可以调整的位置  6        7      1. 把upload.php改成网站开发人员告知的地址  8      2. 把file改成网站开发人员告知的字段名  9      */ 10     // 1. httpClient->url 11      12     // 2. 上传请求P

iOS开发 AFNetworking 3.0使用遇到的问题

前段时间写了一个iOS开发之AFNetworking 3.0.4使用这篇文章,是基本的用法,昨天在使用的时候又出现了几个问题,特地俩记录下,希望能帮到大家! 问题一 我是做一个获取手机验证码的功能,进行一个网络请求,验证码也发给我了,后台的也跟我说请求成功了,但是我这边打印信息显示直接进入了错误的回调...如下图: 验证码获取返回格式问题 报错说是返回类型不一致,后来查明原因,是返回的格式问题(虽然后台跟我说返回的json)需要添加上这么一句话: //如果报接受类型不一致请替换一致text/ht

iOS ATS AFNetworking 单项认证

TLS:Transport Layer Security 首先TLS是有版本的,iOS要求的版本是 TLS 1.2. 为了以防万一,首先还是检查一下服务端提供的版本. nscurl --ats-diagnostics --verbose https://app.xxx.com 比如这个就不支持.. 然后就是AFNetworking的配置了.直接设置AFHTTPSessionManager的SecurityPolicy就行. #import <Foundation/Foundation.h> @

iOS开发-AFNetworking的使用

概述 AFNetworking是一个非常受欢迎的轻量级的iOS.Mac OS X网络通信类库.它建立在NSURLConnection.NSOperation以及其技术的基础上,有着精心设计的模块结构和功能丰富的API,让很多网络通信功能的实现变得十分简单. AFNetworking支持HTTP请求和基于REST的网络服务(包括GET.POST. PUT以及DELETE等).支持ARC.AFNetworking项目中还包含一些列单元测试. 要求iOS 5.0及以上版本,或者Mac OS 10.7及

iOS开发 - AFNetworking网络请求

AFNetworking 什么是AFN 全称是AFNetworking,是对NSURLConnection.NSURLSession的一层封装 虽然运行效率没有ASI高,但是使用比ASI简单 在iOS开发中,使用比较广泛 AFN的github地址 https://github.com/AFNetworking/AFNetworking AFHTTPRequestOperationManager 是AFN中最重要的对象之一 封装了HTTP请求的常见处理 GET\POST请求 解析服务器的响应数据

iOS开发——AFNetworking框架使用详解

AFNetworking is a delightful networking library for iOS and Mac OS X.It's built on top of the Foundation URL Loading System, extending the powerful high-level networking abstractions built into Cocoa. It has a modular architecture with well-designed,