AFNetworking

http://www.cnblogs.com/zangwucao/p/5505331.html

https://my.oschina.net/hehongbo/blog/539952

http://blog.csdn.net/heyddo/article/details/37561005
AFNetworking 用法详解
之前一直使用ASIHttpRequest 做网络请求 ,后来新公司用AFNetWorking ,经过一段时间学习总结一下二者的优缺点:

1.AFNetWorking的优缺点

优点:

1.维护和使用者比较多

2.对ARC支持

3.对Block的支持非常好

4.专门对异步请求的支持

5.支持基于URL 缓存

6.图片以及NSURLCache AFCache缓存使用

7.支持后台下载,缓存离线请求的支持(SDURLCache)

8.对JSON支持比较好

9.对实现的http请求比较容易

10.对HTTPS 的支持

缺点:

是基于Foundation框架的NSURLConnection对网络进行的封装,不是用的底层的CFNetwork进行的封装,扩展功能可能稍微少一些,

但是在http上的网络支持已经足够。

二.ASIHttpRequest

优点:

1.对网络底层CFNetwork支持

2.对代理支持设置比较方便

3.支持离线下载和基于URL的缓存

4.对HTTPS的支持

5.对http 请求方面的实现不是太好,会多写点代码

6.同步和异步的支持

用法:

1.首先将AFNetWorking(主要基于网络请求的方法) UIKit+AFNetworking(异步加载图片的方法)加入到工程 一般引用这两个包,不然会有提示错误 SystemConfiguration.framework、

MobileCoreServices.framework

2.在使用的地方 #import"AFHTTPRequestOperationManager"

                    #import"AFHTTPSessionManager"

AFHTTPOperationManager 的post有两个方法, 一个是普通的post ,另一个是可以上传图片

1.普通的post
(1)一般方法
//初始化 manager
AFHTPRequestOperationMangermanager=[AFHTTPOperation manager];
//请求网页类型
manager.responseSerialize.acceptableContentTypes=[NSSetsetWithObject:@"text/html"];
//请求
NSDictionary
parameters=@{@"参数1":@"value1",@"参数2":@"value2"....};

[manager POST:@"替换成需要访问的地址"parameters:

success:^(AFHTTPRequestOperation*operation,id responseObject){

NSLog(@"success:%@",responseObject);}

failure:^(AFHTTPRequestOperationoperation,ESErrorerror){

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

(2)3.1版本方法
// 请求的参数
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"20131129", @"date", @"1", @"startRecord", @"5", @"len", @"1234567890", @"udid", @"Iphone", @"terminalType", @"213", @"cid", nil];
// 初始化Manager
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 不加上这句话,会报“Request failed: unacceptable content-type: text/plain”错误,因为我们要获取text/plain类型数据
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
// post请求
[manager POST:@"http://ipad-bjwb.bjd.com.cn/DigitalPublication/publish/Handler/APINewsList.ashx?" parameters:dic constructingBodyWithBlock:^(id _Nonnull formData) {
// 拼接data到请求体,这个block的参数是遵守AFMultipartFormData协议的。
} progress:^(NSProgress * _Nonnull uploadProgress) {
// 这里可以获取到目前的数据请求的进度
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 请求成功,解析数据
NSLog(@"%@", responseObject);
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers | NSJSONReadingMutableLeaves error:nil];
NSLog(@"%@", dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 请求失败
NSLog(@"%@", [error localizedDescription]);
}];

2.上传图片

AFHTPOperationMAnager*manager=[AFHTTPOperationManager manager];

manager.responseSerializer.acceptableContentTypes=[NSSetsetWithObject:@"text/html"];

NSDictionary*parameters=@{@"参数1":@"value1",@"参数2":@"value2"....};

NSData*imageData=UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"],1.0);

[manager POST:@"替换成你要访问的地址"parameters:parameters constructingBodyWithBlock:^(idformData){

[formData appendPartWithFileData:imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpep"];

} success:^(AFHTTPRequestOperation*operation,id responseObject){

NSLog(@"success:%@",responseObject);}

failure:^(AFHTTPRequestOperationoperation,ESErrorerror){

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

这个方法可以上传图片,如果不用上传图片,可以吧这句话去掉

[formData appendPartWithFileData:imageData name:@"1" fileName:@"1.png" mimeType:@"image/jpep"];

3.上传多张图片

-(void)uploadPictures{

NSString*domainStr=@"http://192.168.1.69/xffcol/index.php/api/";

AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManager manager];

manager.responseSerializar=[AFHTTPResponseSerializar serializer];

//如果还要上传其他的参数,参考上面的POST请求 ,创建一个可变字典,存入需要提交的参数内容, 作为paramater的参数

[manager POST:domainStr parameters:nil consructingBodyWithBlock:^(idformData)

{

//_imageArray 就是图片数组,我的_imageArray里面存的都是图片的data,下面可以直接取出来使用,如果存的是image,

//将image转换成data的方法如下:NSData*imageData=UIImageJPEGRepresentation([UIImage imageNamed:@"1.png"],1.0);

                        if (_imageArray.count>0){

                              for(int i=0;i<_imageArray.count;i++){

                                       NSData*data=_imageArray[i]

                                        //上传的参数名

                                        NSString*name=[NSString stringWithFormat:@"%d",i]

                                       //上传的filename

                                        NSString*fileName=[NSString stringWithFormat:@"%@.png",name];

                                       [formData appendPartWithFileData:data

                                                                                   name:name

                                                                                   filename:fileName

                                                                                   miimeType:@"image/png"];

                                 }

                            }

                                      success:^(AFHTTPRequestOperation)operation,id responseObject){

                             //关闭风火轮

                             [UIApplication sharedApplication].netorkActivityIndicatorVisiable=NO;

//JSON解析

NSDictionary*resultDic=[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];

NSLog(----------------);

}failure:^(AFHTTPRequestOperationoperation,NSErrorerror{

//解析失败隐藏通风火轮(可以打印error.userInfo查看错误信息)

[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;

}];

}

二.GET请求网络数据方式

-(void)obtainData

{

//启动系统风火轮

[UIApplication shareApplication].networkActicityIndicatorVisible=YES;

//前面写服务器给的域名,后面拼接上需要提交的参数,假如参数是key=1

NSString*domainStr=@"http://192.168.1.69/xffcol/index.php/Api/key/1/";

AFHTTPOperationManager*manager=[AFHTTPOperationManager manager];

manager.responseSerializer=[AFHTTPResponseSerializer serializer];

//以GET的形式提交,只需要将上面的请求地址给GET做参数就可以

[manager GET:domainStr parameters:nil success:^(AFHTTPRequestOperation*operation, id responseObject)

{

//隐藏系统风火轮

[UIApplication sharedApplication].networkActicityIndicatorVisible=NO;

//json解析

NSDictionary *resultDic=[NSJsonSerialization JSONOBjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];

NSLog(@"---获取到的json格式的字典---%@",resultDic);

}failure:^(AFHTTPRequestOperationoperation,NSErrorerror{

//解析失败隐藏通风火轮(可以打印error.userInfo查看错误信息)

[UIApplication sharedApplication].networkActivityIndicatorVisible=NO;

})]

}

你可能感兴趣的:(AFNetworking)