iOS开发之AFNetworking开源库的使用

iOS开发之AFNetworking开源库的使用

1.简介

  常见的处理网络请求方式

  (1)NSURLConnection/NSURLSession

  (2)ASIHttpRequest 早期项目中比较常见, 由于作者不更新了

  (3)AFNetworking 推荐使用, 项目中使用

  (4)MKNetworkKit 试试

2.配置和使用

  2.1 配置

    库文件拖入工程中, 包含头文件

    #import "AFNetworking.h"

  2.2 使用

 //演示AFNetworking的使用
    //1. GET请求(html,json,xml)
    //[self testGetRequset];

    //2.POST请求
    //[self testPostRequest];

    //3.上传文件(上传图片)
    //[self testUploadFile];

    //4.下载文件
    //[self testDownloadFile];

    //5.监控网络状态
    [self testMonitorNetworkStatus];

    //6.图片异步功能(替代SDWebImage)
    // UIKit+AFNetworking.h
    // - (void)setImageWithURL:(NSURL *)url;

    //7.有些请求特殊的请求头
    // BAIDU_WISE_UID=wapp_1428385381699_466;
    //AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    //[manager.requestSerializer setValue:@"wapp_1428385381699_466" forHTTPHeaderField:@"BAIDU_WISE_UID"];

}
-(void)testMonitorNetworkStatus
{
    AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"www.baidu.com"]];
    [manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSDictionary *dict =@{
    @(AFNetworkReachabilityStatusUnknown):@"未知",
    @(AFNetworkReachabilityStatusNotReachable):@"不可达",
    @(AFNetworkReachabilityStatusReachableViaWWAN):@"GPRS",
    @(AFNetworkReachabilityStatusReachableViaWiFi):@"Wifi",};

        NSLog(@"状态为 %@",dict[@(status)]);

    }];
    //开启状态监视
    [manager.reachabilityManager startMonitoring];

}

-(void)testDownloadFile
{
    NSString *urlString = @"http://imgcache.qq.com/club/item/avatar/zip/7/i87/all.zip";

    //创建会话管理器对象(通过默认配置)
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

    NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {

        //返回文件保存位置
        NSString *path = [NSString stringWithFormat:@"%@/Documents/all.zip",NSHomeDirectory()];
        NSLog(@"path = %@",path);
        return [NSURL fileURLWithPath:path];

    } completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
        NSLog(@"下载完成");
    }];
    //启动任务
    [task resume];

}
-(void)testUploadFile
{
    //POST上传接口
    NSString *urlString = @"http://quiet.local/uploadtest/upload.php";
    //参数名: image : 参数值是图片
    AFHTTPRequestOperationManager *mamager = [AFHTTPRequestOperationManager manager];
    mamager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [mamager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

        //实现: 上传的数据附加到请求体中
        //mimeType 多用途互联网邮件扩展类型, 每种文件都有一个类型
        NSString *path = [[NSBundle mainBundle] pathForResource:@"IMG_4131.JPG" ofType:nil];
        NSLog(@"path = %@",path);
        [formData appendPartWithFileURL:[NSURL fileURLWithPath:path] name:@"image" fileName:@"quiet1.jpg" mimeType:@"image/jpeg" error:nil];

    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"str = %@",str);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error = %@",error);
    }];

}
-(void)testPostRequest
{
    //POST接口:http://quiet.local/testdir/login.php
    //参数1: @"user" : @"quiet"
    //参数2: @"password" : @"123"
    NSString *urlString = @"http://quiet.local/testdir/login.php";

    AFHTTPRequestOperationManager *mamager = [AFHTTPRequestOperationManager manager];
    mamager.responseSerializer = [AFHTTPResponseSerializer serializer];

    //参数1: 传入地址
    //参数2: 传入URL请求的参数, 格式传入字典
    [mamager POST:urlString parameters:@{@"user":@"quiet",@"password":@"123"} success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"str = %@",str);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error = %@",error);
    }];

}
-(void)testGetRequset
{
    NSString *urlString = @"http://www.baidu.com";
    urlString = @"http://m.weather.com.cn/data/101010100.html";

    //定义AFNetworking管理
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    //注意: 默认认为数据是JSON,content-type也是JSON, responseObject是解析的字典和数组, 不是产生错误Code=-1016
    //解决: 设置解析器为HTTP形式, 下载回来是NSData
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

        //responseObject重要参数,包含下载数据
        //NSLog(@"o = %@",responseObject);
        NSString *str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"str = %@",str);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error = %@",error);
    }];
}

  

时间: 2024-10-12 23:20:11

iOS开发之AFNetworking开源库的使用的相关文章

ios开发值AFNetworking开源库的使用

ios开发之AFNetworking开源库的使用 1.简介 常见的处理网络请求的方式 (1)NSURLConnection  (2)ASIHttpRequest  (3)AFNetworking  (4)MKNetworkKit (2)配置和使用 库文件拖入工程中, 包含头文件 #import "AFNetworking.h" AFNetworking使用的例子 AFNetworkingUseDemo.xcodeproj.zip

iOS开发之AFNetworking

1.概述 AFNetworking简称AFN,是iOS开发中主流第三方框架之一.苹果的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的操作,同时还要考虑请求数据的安全等一堆问题.而AFNetworking帮我们简化了网络操作. 2.早前的几个网络框架 1.ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新. 2.MKNetworkKit

iOS开发之AFNetworking网络编程

众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各种序列化的操作,同时还要考虑请求数据的安全等一堆问题. 转载请注明出处:http://blog.csdn.net/xn4545945  一.早前的几个网络框架 1.ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新. 2.MKNetworkKit (印度人写的). 3.AFN一直还在

iOS开发之AFNetworking 3.0.4使用

AFNetworking是一个非常方便的网络请求库,可以轻松实现各种网络请求,比如经常使用的GET请求.POST请求,以及上传多张图片等,下面介绍一下基本的使用方法. 首先下载AFNetworking 然后在需要使用的类中,导入如下2个头文件: #import "AFNetworking.h"//主要用于网络请求方法 #import "UIKit+AFNetworking.h"//里面有异步加载图片的方法 GET请求网络数据方式: -(void)obtainData

iOS开发之AFNetworking实现数据传输和文件上传

//传输数据 1 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 2 manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 3 manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 4 5 //2.设置登录参数 6 NSDi

李洪强iOS开发之RunLoop的原理和核心机制

李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研究了RunLoop的原理和特性. RunLoop的定义 当有持续的异步任务需求时,我们会创建一个独立的生命周期可控的线程.RunLoop就是控制线程生命周期并接收事件进行处理的机制. RunLoop是iOS事件响应与任务处理最核心的机制,它贯穿iOS整个系统. Foundation: NSRunLo

iOS开发之XML解析

iOS开发之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示XML文件版本, 内部文本使用的编码 <root> 表示根节点 <CityName>北京</CityName>  一个结点, CityName是结点名, 北京结点值 <Item key="1" value="A"></Item>  

IOS开发之ZBarReaderView的使用

IOS开发之ZBarReaderView的使用 HOMEABOUTGUESTBOOKCATEGORIESTAGSLINKSSUBSCRIBE 当开发IOS程序中需要用到二维码识别功能的时候,zbar这个开源库估计会被不少人选择.但是关于zbar的用法,网上的资料大部分都集中在ZBarReaderViewController这个类的使用上.本人在使用中,发现ZBarReaderViewController这 个类使用很不灵活,比如,如果需要对界面做一些自定义的定制时会变得很麻烦.在zbar的头文件

IOS开发之XML解析以及下拉刷新上拉加载更多的分享

IOS开发之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示XML文件版本, 内部文本使用的编码 <root> 表示根节点 <CityName>北京</CityName>  一个结点, CityName是结点名, 北京结点值 <Item key="1" value="A"></Item>