iOS AFN

#define kActivityList @"http://project.lanou3g.com/teacher/yihuiyun/lanouproject/activitylist.php"  // 活动列表 get

#define kNewsListURL @"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx"  // post请求
#define kNewsListParam @"date=20151102&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213" //body

#define kImageURL @"http://image.zcool.com.cn/56/13/1308200901454.jpg" // 图片, 下载用

#define kSearchURL @"http://api.map.baidu.com/place/v2/search?query=肯德基&region=北京&output=json&ak=6E823f587c95f0148c19993539b99295" // 带汉字的接口, 需要转码

post请求

// POST
- (void)post
{
    // 1.创建AFN管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    // 2.利用AFN管理者发送请求
    NSDictionary *params = @{
                             @"date" : @"20151102",
                             @"startRecord" : @"1",
                             @"len" : @"30",
                             @"udid" : @"1234567890",
                             @"terminalType" : @"Iphone",
                             @"cid" : @"213"
                             };
    // date=20151102&startRecord=1&len=30&udid=1234567890&terminalType=Iphone&cid=213
    [manager POST:kNewsListURL parameters:params success:^
     (NSURLSessionDataTask *task, id responseObject) {
         NSLog(@"请求成功---%@", responseObject);
     } failure:^(NSURLSessionDataTask *task, NSError *error) {
         NSLog(@"请求失败---%@", error);
     }];
}

get请求

#pragma mark -- get请求
- (void)getjson
{
//    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//    [manager GET:kActivityList parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
//        NSLog(@"%@", responseObject);  // 这个接口的类型是 text/html
//    } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
//        NSLog(@"-----%@", error);
//    }];
    NSString *string = [kSearchURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSLog(@"%@", string);
    NSURL *URL = [NSURL URLWithString:kActivityList];
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    [manager GET:URL.absoluteString parameters:nil success:^(NSURLSessionTask *task, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
    } failure:^(NSURLSessionTask *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
}

文件上传

#pragma mark -- 文件上传
- (void)upload
{
    // 1.创建网络管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    // 2.利用网络管理者上传数据
    NSDictionary *dict = @{@"username":@"Syl"};
    // formData: 专门用于拼接需要上传的数据
    [manager POST:@"http://120.25.226.186:32812/upload" parameters:dict
constructingBodyWithBlock:
     ^void(id<AFMultipartFormData> formData) {
         /*
          Data: 需要上传的数据
          name: 服务器参数的名称
          fileName: 文件名称
          mimeType: 文件的类型
          */
         UIImage *image =[UIImage imageNamed:@"hetu"];
         NSData *data = UIImagePNGRepresentation(image);
         [formData appendPartWithFileData:data name:@"file" fileName:@"hetu.png"
                                 mimeType:@"image/png"];
         /*
          NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/
          CertificateSigningRequest.certSigningRequest"];
          // 任意的二进制数据MIMEType application/octet-stream
          // [formData appendPartWithFileURL:url name:@"file" fileName:@"abc.cer"
          mimeType:@"application/octet-stream" error:nil];
          [formData appendPartWithFileURL:url name:@"file" error:nil];
          */
     } success:^void(NSURLSessionDataTask * task, id responseObject) {
         // 请求成功
         NSLog(@"请求成功 %@", responseObject);
     } failure:^void(NSURLSessionDataTask * task, NSError * error) {  
         // 请求失败  
         NSLog(@"请求失败 %@", error);  
     }];
}

文件下载

#pragma mark -- 文件下载
// 执行下载文件的方法,可以监控下载进度
- (void)downLoadMonitor
{
    // 1.创建网络管理者
    // AFHTTPSessionManager 基于NSURLSession
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
   // NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    // 2.利用网络管理者下载数据
    // http://vss.waqu.com/dusdcsuang6u5btu/normal.mp4 视频的网址

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:kImageURL]];
    /*
     destination
     - targetPath: 系统给我们自动写入的文件路径
     - block的返回值, 要求返回一个URL, 返回的这个URL就是剪切的位置的路径
     completionHandler
     - url :destination返回的URL == block的返回的路径
     */
    /*
     @property int64_t totalUnitCount;  需要下载文件的总大小
     @property int64_t completedUnitCount; 当前已经下载的大小
     */
    NSProgress *progress = nil;
    NSURLSessionDownloadTask *downTask = [manager downloadTaskWithRequest:request progress:&progress destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
        // 缓存文件,如果想将缓存文件存到磁盘 SDURLCache
        NSString *cachesPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
        NSString *path = [cachesPath stringByAppendingPathComponent:response.suggestedFilename];
        return [NSURL fileURLWithPath:path];

    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        NSLog(@"%@",filePath.absoluteString);
    }];

    /* 
     要跟踪进度,需要使用 NSProgress,是在 iOS 7.0 推出的,专门用来跟踪进度的类! 
     NSProgress只是一个对象!如何跟踪进度!-> KVO 对属性变化的监听! 
     @property int64_t totalUnitCount;        总单位数 
     @property int64_t completedUnitCount;    完成单位数 
     */  
    // 给Progress添加监听 KVO  
    [progress addObserver:self forKeyPath:@"completedUnitCount"   
                  options:NSKeyValueObservingOptionNew context:nil];  
    // 启动任务
    [downTask resume];  
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context
{

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值