莲叶童子&gt

别来沧海事,语罢暮天钟<莲叶童子>

  1. 文化储备
    1.1 AFNetworking 是一个轻量级的iOS 网络通信类库
    1.2 AFNetworing 基于 NSOperation和NSURLConnection等类库的基本功上,
    让不少网络通信的成效变得更简便
    1.2.1 NSURLConnection 用于拍卖网络连接
    1.2.2 NSOperation是治本 NSURLConnection的,
    可以监视一个网络请求的生命周期.
    1.3 AFNetworking 匡助HTTP请求和按照REST的网络服务(蕴含 GET / POST /
    PUT / DELETE 等等)
    1.4 支持 ARC
  2. NSOperation
    2.1 AFURLConnectionOperation : NSOperation, 已毕了 NSURLConnection
    的代理方法
    2.2 AFHTTPRequestOperation : AFURLConnectionOperation, 针对 request
    使用的合计为 HTTP 和 HTTPS .
    2.3 AFHTTPRequestOperationManager: 封装了一组调用请求的方法.
  3. iOS7.0以上的系统
    3.1 AFURLSesstionManager: 创制, 管理基于 NSURLSessionConfiguration
    对象的 NSURLSession 对象的类, 也得以管理 session 的多少, 下载 /
    上传职分, 完成 session 和其相关联的任务的 delegate 方法.
    3.2 AFHTTPSessionManager: 封装了一组调用请求的方法.
  4. 恳请和对应的连串化
    4.1 AFURLRequestSerialization: 符合那些协议的靶子用于拍卖请求,
    它将呼吁参数转换为 query string 或是 entity body 的样式,
    并设置需求的 header.
    4.2 AFURLResponseSerialization: 符合这些协议的对象用于验证 /
    连串化响应以及相关数据, 转换为有效的花样, 比如: JSON 对象, 图像,
    甚至根据 Mantle 的模型对象.
    4.3 AFNetworking 可以检测当前网络的可达性.
    4.4 AFNetworkingReachabilityManager: 用于监控当前网络的可达性,
    提供回调 block 和 notification, 在可达性变化时调用.
  5. 提供请求的安全策略
    5.1 AFSecurityPolicy:
    评估服务器对张家界连接针对指定的证书或公共密钥的信任,
    将您的服务器证书添加到 app bundle, 幸免中间人攻击.
  6. AFNetworking ——– GET 请求

AFNetWorking:

  • AFNetworking是一个 在iOS开发中选择至极多的网络开源库
  • 是用以iOS以及Mac OS X . 构建于在(Apple iOS开发文档)NSURLConnection,
    NSOperation, 以及任何熟习的Foundation技术之上.
  • 她有所美丽的架构, 丰富的api, 以及模块化构建格局,
    使得应用起来万分轻松
    法定链接

选用AFNetworking举办网络判断
使用AFNetworking进行GET和POST请求

1、AFNetworking是一个轻量级的iOS网络通信类库。

2、它确立在NSURLConnection和NSOperation等类库的根基上,让无数网络通信效用的兑现变得老大简便。

3、它帮助HTTP请求和按照REST的网络服务(包罗GET、POST、
PUT、DELETE等)。

4、支持ARC。

  • 千帆竞发布署 AFNetWorking 思路

AFNetworking是基于NSURLConnection和NSOperation的
1: NSURLConnection是拍卖网络连接的。
2: NSOperation是管制NSURLConnection的,可以监视一个伸手的生命周期。

  • NSOperation相关类 (AFNetWorking比较重大的类)

1: AFURLConnectionOperation:NSOperation的子类,完毕了NSURLConnection
的代办方法。将网络请求依附到一个operation上。从而让咱们可以有效的操纵并洞察一个网络请求的创始、进行、打消、已毕、暂停复苏、相当等问题及气象

2、AFHTTPRequestOperation:AFURLConnectionOperation的子类,针对request使用的商事为HTTP和HTTPS。它包裹的可承受状态码和情节的体系,判定一个呼吁结果是大功告成或战败

3、AFHTTPRequestOperationManager:(大旨类)
封装了一组调用请求的法门—封装达成了一种通用的格局,可以扶助我们做到请求的创导、响应的自由化,网络状态的监督以及安全策略以及每一个请求operation的治本

  • #### iOS7.0事后AFNetWorking进一步健全的类

1: AFURLSessionManager:创立、管理基于 NSURLSessionConfiguration
对象的 NSURLSession 对象的类,也足以管理 session
的数据、下载/上传任务,完毕 session 和其相关联的天职的 delegate 方法。

2、AFHTTPSessionManager:封装了一组调用请求的形式。

  • AFNetworking针对请求和响应的体系化进行的单独的包装

1、AFURLRequestSerialization:合这么些协议的靶子用于拍卖请求,它将请求参数转换为
query string 或是 entity body 的格局,并设置要求的 header。

2、AFURLResponseSerialization:符合那个协议的靶子用于注明、体系化响应及连锁数据,转换为使得的花样,比如
JSON 对象、图像、甚至依照 Mantle 的模型对象。

  • AFNetworking可以检测当前网络的可达性。

1:
AFNetworkReachabilityManager:这些类监控当前网络的可达性网络的连结状态监控以及网络的种类。,提供回调
block 和
notificaiton,在可达性变化时调用。实际是将苹果官方提供的Reachability的类名和通闻明更换了须臾间,避免和体系提供的类的通有名以及类名的争持。

  • AFNetworking提供了请求的安全策略。

1、AFSecurityPolicy:评估服务器对平安连接针对指定的定点证书或国有密钥的亲信。将你的服务器证书添加到
app bundle,以协理幸免 中间人攻击。

  • 七个第一的说道
  • AFURLRequestSerialization
    1:符合那一个协议的目的用于拍卖请求,它将请求参数转换为 query string
    或是 entity body 的花样,并设置需要的 header。
    2:构建multipart请求。

  • AFURLResponseSerialization
    坚守AFURLResponseSerialization协商的对象,用于申明、种类化响应及有关数据,转换为可行的花样,比如
    JSON 对象、图像、甚至根据mantle的模子对象。

![](https://upload-images.jianshu.io/upload_images/1936722-6fb916bd9e0fbb77.png)

屏幕快照 2016-07-21 下午5.06.51.png



AFNetworking -------- POST请求



![](https://upload-images.jianshu.io/upload_images/1936722-6948c28cb8c38b90.png)

屏幕快照 2016-07-21 下午5.17.41.png


AFNetworking --------- 下载文件  

![](https://upload-images.jianshu.io/upload_images/1936722-0070bdd9ff1cb915.png)

屏幕快照 2016-07-21 下午5.36.18.png



AFNetworking --------- 上传文件



![](https://upload-images.jianshu.io/upload_images/1936722-20876366163664e9.png)

屏幕快照 2016-07-21 下午5.39.21.png


AFNetworking ---------- 网络判断  

![](https://upload-images.jianshu.io/upload_images/1936722-282130b21d0bd511.png)

屏幕快照 2016-07-21 下午5.42.20.png
那些自己也用的不太熟识,搜集了有的基础知识供大家参考, 上面多少个大约的代码例子,欢迎大家指正
#pragma mark -------- GET 请求 ------------
- (void)get
{
// 创建请求 Manager 对象
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

  [mgr GET:@"GET_URL" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
       // responseObject 里面, 是请求成功以后返回的字典或者数据, 然后对其进行解析
        NSLog(@"GET 请求成功: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"GET 请求失败: %@ ", error);
    }];
}

#pragma mark -------- POST 请求 --------------
- (void)post
{// 创建请求对象
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager new];

// 设置请求参数为 JSON 格式 
    mgr.requestSerializer = [AFJSONRequestSerializer serializer];
// 设置响应序列化为二进制   
  mgr.responseSerializer = [AFJSONResponseSerializer serializer];

// 设置一个 Body
    NSDictionary *dic = @{@"date":@"20131129",@"startRecord":@"1",@"len":@"5",@"udid":@"1234567890",@"terminalType":@"Iphone",@"cid":@"213"};   
    [mgr POST:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx" parameters:dic success:^(AFHTTPRequestOperation *operation, id responseObject){

        NSLog(@"POST 请求成功: %@",responseObject);
//        NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
//        NSLog(@"%@",str);

} failure:^(AFHTTPRequestOperation *operation, NSError *error){
    NSLog(@"POST 请求失败: %@",error);
}];

#pragma mark -------  下载 ---------
- (void)DownLoad
{
// 创建一个用来分别配置每一个 session 对象的配置类
 //  defaultSessionConfiguration : 是session默认配置, 使用硬盘内存来存储缓存数据

    NSURLSessionConfiguration *Configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

// 创建 manager 管理对象
    AFURLSessionManager *mgr = [[AFURLSessionManager alloc] initWithSessionConfiguration:Configuration];

// 下载内容的接口 百度的一张照片
    NSURL *url = [NSURL URLWithString:@"http://a2.att.hudong.com/36/41/01300000281228122578414333627.jpg"];

// 创建请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

// 创建下载任务
    NSURLSessionDownloadTask *task = [mgr downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
        // block 需要返回值 就是你要存的位置
        NSURL *path = [[NSFileManager defaultManager] URLForDirectory:(NSDocumentDirectory) inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
        // 返回和服务器文件名一样, 当我们希望保存的文件名和服务器的文件名一致的时候, 可以使用这个名字: suggestedFilename
        return [path URLByAppendingPathComponent:[response suggestedFilename]];
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        NSLog(@"打印下载的路径: %@",filePath);
    }];

    [task resume];
}

#pragma mark ----------- 文件上传 ---------

- (void)UpLoad
{
// 创建一个用来分别配置每一个 session 对象的类
//  defaultSessionConfiguration : 是session默认配置, 使用硬盘内存来存储缓存数据

    NSURLSessionConfiguration *Configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
// 创建 manager 管理对象
    AFURLSessionManager *mgr = [[AFURLSessionManager alloc] initWithSessionConfiguration:Configuration];

    // 将东西上传到的接口
    NSURL *url = [NSURL URLWithString:@""];

// 创建请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

// 将要上传文件的路径
    NSURL *path = [NSURL fileURLWithPath:@"电脑路径"];


//创建任务
    NSURLSessionUploadTask *task = [mgr uploadTaskWithRequest:request fromFile:path progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
        if (error)
        {
            NSLog(@"上传失败 ---- %@",error);
        }else
        {
            NSLog(@"上传成功----%@-----%@",response, responseObject);
        }
    }];

    [task resume];

}

#pragma mark ---- 网络判断 -------
- (void)reachbility
{
// 创建网络监听管理者对象
    AFNetworkReachabilityManager *mgr = [AFNetworkReachabilityManager sharedManager];
// 设置监听
[mgr setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status)
    {

        case AFNetworkReachabilityStatusUnknown:
            NSLog(@"未识别的网路");
            break;

        case AFNetworkReachabilityStatusReachableViaWWAN:
            NSLog(@"2G 3G 4G 网络");
            break;

        case AFNetworkReachabilityStatusReachableViaWiFi:
            NSLog(@"WIFI");
            break;

        case AFNetworkReachabilityStatusNotReachable:
            NSLog(@"不可达的(未连接的)");
            break;

        default:
            break;
    }
}];

    // 开启监听
    [mgr startMonitoring];

}

相关文章