AFNetworking

1.AFHTTPSessionManager是对NSURLSession的封装:
2.AFN可以自动对服务器返回的数据进行解析(默认当做JSON数据进行解析)
3.AFN可以监控网络连接状态(提示:要监控网络连接状态,必须要先调用单例的startMonitoring方法)


AFHTTPSessionManager向服务器发送POST/GET请求:

// 创建一个请求管理者
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];

// 对服务器返回的数据的解析方式(默认当作JSON进行解析)
// 然后在请求成功的Blcok中,按设置的解析方式解析数据
    //manager.responseSerializer = [AFJSONResponseSerializer serializer];

manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //解析XML

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // 解析原始的HTTP请求数据,NSData

    // 请求的Url
    NSString *url = @"http://localhost:8080/MJServer/login";
    // 请求的拼接参数
    NSMutableDictionary *param = [NSMutableDictionary dictionary];
    param[@"username"] = @"1234";
    param[@"pwd"] = @"1233";



// *  1. URLString: The URL string used to create the request URL.
// *  2. parameters: The parameters to be encoded according to the client request    serializer.
// *  3. success: A block object to be executed when the task finishes successfully. This block has no return value and takes  two arguments: the data task, and the response object created by the client response serializer.
// *  4. failure: A block object to be executed when the task finishes unsuccessfully, or that finishes successfully, but encountered an error while parsing the response data. This block has no return value and takes a two arguments: the data task and the error describing the network or parsing error that occurred.

    // POST请求
    [manager POST:url parameters:param progress:^(NSProgress * _Nonnull uploadProgress) {
        // ...

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

        // 请求成功时调用的Block
        NSLog(@"请求成功");
        NSLog(@"%@",responseObject); // responseObject为服务器返回的数据,默认情况下进行JSON数据解析,所以直接返回字典(数组)
        // 否则,按照先前设置的解析方式,接下来进行解析。
        // AFXMLParserResponseSerializer按SAX方式,NSXMLParser,逐行解析
        // AFHTTPResponseSerializer按NSData,如文件上传或下载

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

        // 请求失败时调用的Block
        NSLog(@"请求失败");
        NSLog(@"%@",error);

    }];

AFHTTPSessionManager 上传数据/文件:

    // 创建一个请求管理者
    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];

    // 对服务器返回的数据的解析方式(默认当作JSON进行解析)

    // 请求的Url
    NSString *url = @"http://localhost:8080/MJServer/upload";
    // 请求的拼接参数
    NSMutableDictionary *param = [NSMutableDictionary dictionary];
    param[@"username"] = @"123";
    param[@"pwd"] = @"1233";


    // POST请求,上传文件
   [manager POST:url parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {


       NSURL *textUrl = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"txt"];

       // FileURL: 上传文件到服务器的URL
       // name:  服务器端接收文件的参数名
       // fileName: 所上传文件的文件名
       // mimeType: 文件类型
       [formData appendPartWithFileURL:textUrl name:@"file" fileName:@"test.txt" mimeType:@"text/plain" error:nil];

   } progress:^(NSProgress * _Nonnull uploadProgress) {

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

       NSLog(@"上传成功");
       NSLog(@"%@",responseObject);

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

       NSLog(@"上传失败");
       NSLog(@"%@",error);

   }];

AFNetworking上传数据/文件的两种方式:
1)上传txt文件

       // FileURL: 上传文件到服务器的URL
NSURL *textUrl = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"txt"];
       // name:  服务器端接收文件的参数名
       // fileName: 所上传文件的文件名
       // mimeType: 文件类型
[formData appendPartWithFileURL:textUrl name:@"file" fileName:@"test.txt" mimeType:@"text/plain" error:nil];

2)上传图像数据

        // FileData: 上传到服务器的NSData数据
        // name:  服务器端接收文件的参数名
        // fileName: 所上传文件的文件名
        // mimeType: 文件类型
[formData appendPartWithFileData:data name:@"file" fileName:@"003.png" mimeType:@"image/png"];

AFNetworkReachabilityManager监控联网状态:

AFNetworkReachabilityManager *netManager = [AFNetworkReachabilityManager sharedManager];

[netManager setReachabilityStatusChangeBlock: ^(AFNetworkReachabilityStatus status) {

    switch (status) {
       case AFNetworkReachabilityStatusReachableViaWiFi:

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

                NSLog(@"WWAN");
                break;
       case AFNetworkReachabilityStatusUnknown:

                NSLog(@"未知网络");
                break;
       case AFNetworkReachabilityStatusNotReachable:

                NSLog(@"不可用");
                break;

            default:
                break;
        }
    }];

    [netManager startMonitoring];
-(void)dealloc
{
    [[AFNetworkReachabilityManager sharedManager] stopMonitoring];

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值