zoukankan      html  css  js  c++  java
  • AFNetworking 2.5.0版本的使用

    AFNetworking 2.5.0版本的使用

    http://afnetworking.com/

    http://cocoadocs.org/docsets/AFNetworking/2.5.0/

    1. 下载源码并进行编译

    源码地址 http://pan.baidu.com/s/1jG24w3W

    2. 判断当前是否有网络,基准网址为 http://baidu.com/

     

    源码:

    可以用来监测WWAN或者WiFi或者断网状态;)

        // 基准baseURL
        NSURL *baseURL                         = [NSURL URLWithString:@"http://baidu.com/"];
        AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL];
        NSOperationQueue *operationQueue       = manager.operationQueue;
        [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusReachableViaWWAN:
                case AFNetworkReachabilityStatusReachableViaWiFi:
                    [operationQueue setSuspended:NO];
                    
                    // 此处可以发送有网络通知
                    NSLog(@"有网络");
                    
                    break;
                case AFNetworkReachabilityStatusNotReachable:
                default:
                    [operationQueue setSuspended:YES];
                    
                    // 此处可以发送断网通知
                    NSLog(@"断网了");
                    
                    break;
            }
        }];
        
        // 开始监测网络
        [manager.reachabilityManager startMonitoring];

    3. 不带参数的GET请求

    源码:

        // 初始化网址
        NSString *requestAddress = 
            @"http://api.openweathermap.org/data/2.5/forecast/daily?lat=39.88293652833437&lon=116.4621119300779&lang=zh_cn";
        
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        
        // 不带参数的GET请求
        [manager GET:requestAddress
          parameters:nil
             success:^(AFHTTPRequestOperation *operation, id responseObject) {
                 NSLog(@"%@", responseObject);
        }
             failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                 NSLog(@"%@", error);
        }];

    4. 带参数GET的请求

    源码:

        // 初始化网址
        NSString *requestAddress = 
            @"http://api.openweathermap.org/data/2.5/forecast/daily";
        
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        
        // 参数的GET请求
        [manager GET:requestAddress
          parameters:@{@"lat"  : @"39.88293652833437",
                       @"lon"  : @"116.4621119300779",
                       @"lang" : @"zh_cn"}
             success:^(AFHTTPRequestOperation *operation, id responseObject) {
                 NSLog(@"%@", responseObject);
        }
             failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                 NSLog(@"%@", error);
        }];

    5. 不带参数的POST请求

    源码:

        // 初始化网址
        NSString *cityName       = [@"北京" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString *requestAddress = 
            [NSString stringWithFormat:@"http://apis.haoservice.com/weather?cityname=%@&key=1d309cc633984df791b51f48ddf09d4b", cityName];
        
        AFHTTPRequestOperationManager *manager            = [AFHTTPRequestOperationManager manager];
        manager.responseSerializer.acceptableContentTypes = 
            [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
    
        // 不带参数的POST请求
        [manager POST:requestAddress
           parameters:nil
              success:^(AFHTTPRequestOperation *operation, id responseObject) {
                  NSLog(@"%@", responseObject);
              }
              failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                  NSLog(@"%@", error);
              }];

    6. 带参数的POST请求

    源码:

        // 初始化网址
        NSString *cityName       = [@"北京" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString *requestAddress = 
            [NSString stringWithFormat:@"http://apis.haoservice.com/weather"];
        
        AFHTTPRequestOperationManager *manager            = [AFHTTPRequestOperationManager manager];
        manager.responseSerializer.acceptableContentTypes = 
            [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
    
        // 带参数的POST请求
        [manager POST:requestAddress
           parameters:@{@"cityname" : cityName,
                        @"key"      : @"1d309cc633984df791b51f48ddf09d4b"}
              success:^(AFHTTPRequestOperation *operation, id responseObject) {
                  NSLog(@"%@", responseObject);
              }
              failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                  NSLog(@"%@", error);
              }];

    附录:

    基于URL-form-encodes Body方式的POST请求

        // 初始化网址
        NSString *cityName       = [@"北京" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSString *requestAddress = 
            [NSString stringWithFormat:@"http://apis.haoservice.com/weather"];
        
        AFHTTPRequestOperationManager *manager            = [AFHTTPRequestOperationManager manager];
        // 创建 URL-form-encodes HTTP message bodies
        manager.requestSerializer                         = [AFJSONRequestSerializer serializer];
        // 接受的数据类型
        manager.responseSerializer.acceptableContentTypes = 
            [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
    
    
        // 带参数的POST请求
        [manager POST:requestAddress
           parameters:@{@"cityname" : cityName,
                        @"key"      : @"1d309cc633984df791b51f48ddf09d4b"}
              success:^(AFHTTPRequestOperation *operation, id responseObject) {
                  NSLog(@"%@", responseObject);
              }
              failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                  NSLog(@"%@", error);
              }];

    7. 文件下载

    //
    //  ViewController.m
    //  AFNetworking2.5.0
    //
    //  Created by XianMingYou on 15/2/14.
    //  Copyright (c) 2015年 XianMingYou. All rights reserved.
    //
    
    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 定义一个progress指针
        NSProgress *progress;
        
        // 创建一个URL链接
        NSURL *url = [NSURL URLWithString:@"http://41.duote.com.cn/2345explorer.exe"];
        
        // 初始化一个请求
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        
        // 获取一个Session管理器
        AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
        
        // 开始下载任务
        NSURLSessionDownloadTask *downloadTask = 
            [session downloadTaskWithRequest:request
                                    progress:&progress
                                 destination:^NSURL *(NSURL *targetPath, NSURLResponse *response)
             {
                 // 拼接一个文件夹路径
                 NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory
                                                                                       inDomain:NSUserDomainMask
                                                                              appropriateForURL:nil
                                                                                         create:NO
                                                                                          error:nil];
                 
                 // 根据网址信息拼接成一个完整的文件存储路径并返回给block
                 return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
                 
             } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error)
             {
                 // 结束后移除掉这个progress
                 [progress removeObserver:self
                               forKeyPath:@"fractionCompleted"
                                  context:nil];
             }];
        
        // 设置这个progress的唯一标示符
        [progress setUserInfoObject:@"someThing" forKey:@"Y.X."];
        [downloadTask resume];
        
        // 给这个progress添加监听任务
        [progress addObserver:self
                   forKeyPath:@"fractionCompleted"
                      options:NSKeyValueObservingOptionNew
                      context:nil];
    }
    
    - (void)observeValueForKeyPath:(NSString *)keyPath
                          ofObject:(id)object
                            change:(NSDictionary *)change
                           context:(void *)context {
        if ([keyPath isEqualToString:@"fractionCompleted"] && [object isKindOfClass:[NSProgress class]]) {
            NSProgress *progress = (NSProgress *)object;
            NSLog(@"Progress is %f", progress.fractionCompleted);
        }
    }
    
    @end

    8. 文件上传

    单文件上传 - (没有办法做试验演示)

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
    
    NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    
    NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
    NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
        if (error) {
            NSLog(@"Error: %@", error);
        } else {
            NSLog(@"Success: %@ %@", response, responseObject);
        }
    }];
    [uploadTask resume];

    多文件上传 - (没有办法做试验演示)

    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
        } error:nil];
    
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    NSProgress *progress = nil;
    
    NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
        if (error) {
            NSLog(@"Error: %@", error);
        } else {
            NSLog(@"%@ %@", response, responseObject);
        }
    }];
    
    [uploadTask resume];

    9. Request Serialization

    Request serializers create requests from URL strings, encoding parameters as either a query string or HTTP body.

    请求序列化是为了从URL字符串创建出编码后的参数,或者是序列字典,或者是HTTP实体.

    NSString *URLString = @"http://example.com";
    NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};

    QUERY STRING PARAMETER ENCODING

    字符串序列编码

    [[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];
    GET请求 http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3
    

    URL FORM PARAMETER ENCODING

    URL表单编码

    [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];
    POST请求 http://example.com/
    Content-Type: application/x-www-form-urlencoded
    
    foo=bar&baz[]=1&baz[]=2&baz[]=3
    

    JSON PARAMETER ENCODING

    JSON编码

    [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];
    POST请求 http://example.com/
    Content-Type: application/json
    
    {"foo": "bar", "baz": [1,2,3]}

    注: POST分为JSON或者URL表单编码

  • 相关阅读:
    机器学习篇:sklearn.datasets
    Java篇:Java网络编程(二)网络地址及端口
    机器学习篇:sklearn.model_selection
    实践 12:多线程读写文件
    机器学习篇:循环神经网络RNN
    Java篇:Java网络编程(三)URL
    Java篇:Java网络编程(一)网络分层
    Java篇:Java的安全模型
    DataTable无法使用AsEnumerable ()的解决办法
    问一个关于WPF调用axWindowsMediaPlayer播放不稳定的问题,大侠们给个建议!谢了
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4291959.html
Copyright © 2011-2022 走看看