AFN

AFHTTPSessionManager

  • AFN中最重要的对象之一

    • 封装了HTTP请求的常见处理
    • GET\POST请求
    • 解析服务器的响应数据

    • 创建

AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];

GET\POST请求

  • GET请求
- (NSURLSessionDataTask *)GET:(NSString *)URLString
                   parameters:(id)parameters
                   success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
                   failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
  • 使用

 /**
 * 第1种发送get请求方法
 * AFHTTPSessionManager底层对NSURLSession进行了包装
 */
  NSString *string = @"http://181.24.986.115:34812/login";
    AFHTTPSessionManager *manger = [AFHTTPSessionManager manager];
    NSDictionary *parmae = @{
                             @"username" : @"wzy",
                             @"pwd" : @"wzy"
                             };
    [manger GET:string parameters:parmae success:^(NSURLSessionDataTask *task, id responseObject) {
        NSLog(@"%@",responseObject);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSLog(@"%@",error);
    }];
/**
 * 第2种发送get请求方法
 */
    NSString *string = @"http://120.25.226.186:32812/login";
    AFHTTPRequestOperationManager *manger = [AFHTTPRequestOperationManager manager];
    NSDictionary *parmae = @{
                             @"username" : @"520it",
                             @"pwd" : @"520it"
                             };

    [manger GET:string parameters:parmae success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"%@",responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"%@",error);
    }];
  • POST请求
- (NSURLSessionDataTask *)POST:(NSString *)URLString
                   parameters:(id)parameters
                   success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
                   failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure

文件上传

- (NSURLSessionDataTask *)POST:(NSString *)URLString
                    parameters:(id)parameters
     constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
                    success:(void (^)(NSURLSessionDataTask *task, id responseObject))success
                    failure:(void (^)(NSURLSessionDataTask *task, NSError *error))failure
/**
 * 文件上传
 */
- (void)upload
{

    NSString *string = @"http://120.25.226.186:32812/upload";

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    [manager POST:string parameters:@{@"username" : @"520it"} constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        // 第一种
        // 这个name不能乱写,只能写@"file"
//        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/apple/Desktop/Temp/Waiting/placeholder.png"] name:@"file" error:nil];

        // 第二种
//        [formData appendPartWithFileData:[NSData dataWithContentsOfFile:@"/Users/apple/Desktop/Temp/Waiting/placeholder.png"] name:@"file" fileName:@"placeholder.png" mimeType:@"image/png"];

        // 第三种
        [formData appendPartWithFileURL:[NSURL URLWithString:@"/Users/apple/Desktop/Temp/Waiting/placeholder.png"] name:@"file" fileName:@"place" mimeType:@"image/png" error:nil];

    } success:^(NSURLSessionDataTask *task, id responseObject) {

        NSLog(@"%@",responseObject);

    } failure:^(NSURLSessionDataTask *task, NSError *error) {

        NSLog(@"%@",error);

    }];
}

让服务器返回XML数据

/**
 * 让服务器返回XML数据
 */
- (void)programReturnXML
{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    // 直接使用服务器返回的数据
//    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    //    [AFJSONResponseSerializer serializer]; // 解析服务器返回的JSON数据
    //    [AFXMLParserResponseSerializer serializer]; // 解析服务器返回的XML数据

    manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

    NSDictionary *params = @{
                             @"username" : @"520it",
                             @"pwd" : @"520it",
                             @"type" : @"XML"
                             };

    [manager GET:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, NSXMLParser *parser) {

        NSLog(@"%@",parser);

    } failure:^(NSURLSessionDataTask *task, NSError *error) {

        NSLog(@"%@",error);
    }];
}

监控联网状态

AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
[manager startMonitoring];

[manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    NSLog(@"%d", status);
}];
  • 提示:要监控网络连接状态,必须要先调用单例的startMonitoring方法

    • 监视网络状态
/**
 * AFNetworkReachabilityStatusUnknown          = -1,// 网络错误
 * AFNetworkReachabilityStatusNotReachable     = 0,
 * AFNetworkReachabilityStatusReachableViaWWAN = 1,
 * AFNetworkReachabilityStatusReachableViaWiFi = 2,
 */
    AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];

    [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {

        NSLog(@"%zd",status);
    }];
    [manager startMonitoring];
  • 监听网络改变
/**
 * 监听网络状态的改变
 */
- (void)monitorNetWorkStatusChange
{
    /*
     * NSString *kReachabilityChangedNotification = @"kNetworkReachabilityChangedNotification";
     * 网络状态的改变
     */
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getNetWorkStatus) name:kReachabilityChangedNotification object:nil];
    NSLog(@"monitorNetWorkStatusChange");
    self.reachability = [Reachability reachabilityForInternetConnection];

    [self.reachability startNotifier];
}

/**
 * 当控制器挂了,就停止监听,并清空reachability内存
 */
- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];

    [self.reachability stopNotifier];

    self.reachability = nil;
}

/**
 * 获得网络状态
 */
- (void)getNetWorkStatus
{
    if ([Reachability reachabilityForLocalWiFi].currentReachabilityStatus != NotReachable) {
        NSLog(@"WIFI");
    }else if([Reachability reachabilityForInternetConnection].currentReachabilityStatus != NotReachable)
    {
        NSLog(@"data");
    }else
    {
        NSLog(@"network wrong");
    }
}

ASI和AFN架构对比

results matching ""

    No results matching ""