zoukankan      html  css  js  c++  java
  • iOS网络-05-AFNetwoking原理及常用操作

    AFN的六大模块


    NSURLConnection,主要对NSURLConnection进行了进一步的封装,包含以下核心的类:
    AFURLConnectionOperation AFHTTPRequestOperationManager AFHTTPRequestOperation NSURLSession,主要对象NSURLSession对象进行了进一步的封装,包含以下核心的类:
    AFURLSessionManager AFHTTPSessionManager Reachability,提供了与网络状态相关的操作接口,包含以下核心的类:
    AFNetworkReachabilityManager Security,提供了与安全性相关的操作接口,包含以下核心的类:
    AFSecurityPolicy Serialization,提供了与解析数据相关的操作接口,包含以下核心的类:
    AFURLRequestSerialization AFURLResponseSerialization UIKit,提供了大量网络请求过程中与UI界面显示相关的操作接口,通常用于网络请求过程中提示,使用户交互更加友好,包含以下核心的分类/类:
    AFNetworkActivityIndicatorManager UIActivityIndicatorView+AFNetworking UIAlertView+AFNetworking UIButton+AFNetworking UIImageView+AFNetworking UIKit+AFNetworking UIProgressView+AFNetworking UIRefreshControl+AFNetworking UIWebView+AFNetworking

    AFURLSessionManager


    创建任务的方法

    普通任务

    - (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
    /**
    * request:请求对象
    * completionHandler:请求完成调用的Block 
        * response:服务器的响应信息
        * responseObject:服务器返回的数据
        * error:错误信息
    */

    上传任务(分别上传不同类型的文件)

    // 1. 上传文件类型的数据
    - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
    /**
    * fileURL:所要上传文件的路径
    */
    
    // 2. 上传NSData类型的数据
    - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
    /**
    * bodyData:所要上传的文件数据
    */
    
    // 3. 上传流数据
    - (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request progress:(NSProgress * __autoreleasing *)progress completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler
    /**
    * request:通过流数据初始化的请求对象
    */

    下载任务

    // 1. 普通下载任务
    - (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request progress:(NSProgress * __autoreleasing *)progress destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler
    /**
    * progress:管理下载进度
    * destination:保存数据调用的Block
        * targetPath:数据的保存路径
        * 服务器的响应信息
    */
    
    // 2. 支持断点下载的下载任务
    - (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData progress:(NSProgress * __autoreleasing *)progress destination:(NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(void (^)(NSURLResponse *response, NSURL *filePath, NSError *error))completionHandler 
    /**
    * progress:管理下载进度
    * resumeData:断点下载时的断点信息
    */                                   

    AFHTTPSessionManager


    常用的属性
    baseURL(NSURL *),用于监视网络可达性与创建请求对象 requestSerializer(AFHTTPRequestSerializer *),指定指定GET、HEAD与DELETE请求参数的解析格式 responseSerializer(AFHTTPResponseSerializer *),用于指定服务器返回数据的格式

    常用方法

    初始化

    // 1. 通过工厂方法创建AFHTTPSessionManager对象
    + (instancetype)manager
    // 2. 通过构造方法创建AFHTTPSessionManager对象
    - (instancetype)initWithBaseURL:(NSURL *)url
    /**
    * 根据url初始化AFHTTPSessionManager对象
    */
    - (instancetype)initWithBaseURL:(NSURL *)url sessionConfiguration:(NSURLSessionConfiguration *)configuration
    /**
    * 根据url与configuration初始化AFHTTPSessionManager对象
    */

    请求数据

    // 1. GET请求
    - (NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
    /**
    * URLString:请求路径
    * parameters:请求参数
    * success:请求成功时调用的Block
        * responseObject:服务器返回的数据
    * failure:请求失败时调用的Block
        * error:错误信息
    */
    // 2. POST请求
    - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
    /**
    * 参数含义与GET请求相同
    */
    - (NSURLSessionDataTask *)POST:(NSString *)URLString parameters:(id)parameters constructingBodyWithBlock:(void (^)(id  formData))block success:(void (^)(NSURLSessionDataTask *task, id responseObject))success failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
    /**
    * block:用于创建多个数据来源
    */

    使用AFN请求网络数据


    请求数据(XML/JSON)

    创建AFHTTPSessionManager对象

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    指定对服务器的返回数据格式

    //以XML文档的形式返回数据
    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
    //以JSON形式返回数据
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

    设置请求体(类型为XML或JSON)

    // 请求体通常由服务器指定格式
        NSDictionary *params = @{
                             @username : @账号,
                             @pwd : @密码,
                             @type : @XML/JSON
                             };                             

    发送请求

    [manager GET:@请求路径 parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
        //responseObject:服务器返回的数据
        NSLog(@请求成功);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        //error:错误信息
        NSLog(@请求失败);
    }];

    上传数据

    创建AFHTTPSessionManager对象

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    创建上传任务

    /**基于NSURLConnection*/
    [manager POST:@请求路径 parameters:@{@用户名 : @密码 constructingBodyWithBlock:^(id formData) {
        //设置需要上传的文件
        NSData *data = [NSData dataWithContentsOfFile:@所要长传文件的路径];
        [formData appendPartWithFileData:data name:@file fileName:@test.png mimeType:@image/png];
    } success:^(NSURLSessionDataTask *task, id responseObject) {      
        //上传成功
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        //上传失败
    }];
    
    /**基于NSURLSession*/
    [manager uploadTaskWithRequest:request fromData:data progress:progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
        //上传数据成功
    }];

    下载数据

    创建AFHTTPSessionManager对象

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    创建下载任务

    /**基于NSURLSession*/
    [manager downloadTaskWithRequest:request progress:progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
        // 存储下载数据是调用的Block
    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        //下载完成时调用的Block
    }]
  • 相关阅读:
    【leetcode】1630. Arithmetic Subarrays
    【leetcode】1629. Slowest Key
    【leetcode】1624. Largest Substring Between Two Equal Characters
    【leetcode】1620. Coordinate With Maximum Network Quality
    【leetcode】1619. Mean of Array After Removing Some Elements
    【leetcode】1609. Even Odd Tree
    【leetcode】1608. Special Array With X Elements Greater Than or Equal X
    【leetcode】1603. Design Parking System
    【leetcode】1598. Crawler Log Folder
    Java基础加强总结(三)——代理(Proxy)Java实现Ip代理池
  • 原文地址:https://www.cnblogs.com/h-tao/p/4847248.html
Copyright © 2011-2022 走看看