#import "ViewController.h"
#import "AFNetworking.h" @interface ViewController ()<NSXMLParserDelegate> @end @implementation ViewController -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self httpData2];
} //返回的是JSON数据
-(void)json
{
//1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //http://120.25.226.186:32812/login?username=123&pwd=122&type=JSON
// NSDictionary *paramDict = @{
@"username":@"520it",
@"pwd":@"520it",
@"type":@"JSON"
};
//2.发送GET请求
/*
第一个参数:请求路径(不包含参数).NSString
第二个参数:字典(发送给服务器的数据~参数)
第三个参数:progress 进度回调
第四个参数:success 成功回调
task:请求任务
responseObject:响应体信息(JSON--->OC对象)
response:请求头信息
第五个参数:failure 失败回调
error:错误信息
响应头:task.response
*/
[manager GET:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"%@---%@",[responseObject class],responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"请求失败--%@",error);
}];
} //返回的是XML
-(void)xml
{
//1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //http://120.25.226.186:32812/login?username=123&pwd=122&type=JSON
// //注意:如果返回的是xml数据,那么应该修改AFN的解析方案
manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; NSDictionary *paramDict = @{
@"type":@"XML"
};
//2.发送GET请求
/*
第一个参数:请求路径(不包含参数).NSString
第二个参数:字典(发送给服务器的数据~参数)
第三个参数:progress 进度回调
第四个参数:success 成功回调
task:请求任务
responseObject:响应体信息(JSON--->OC对象)
第五个参数:failure 失败回调
error:错误信息
响应头:task.response
*/
[manager GET:@"http://120.25.226.186:32812/video" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task,NSXMLParser *parser) { //NSLog(@"%@---%@",[responseObject class],responseObject);
//NSXMLParser *parser =(NSXMLParser *)responseObject; //设置代理
parser.delegate = self; //开始解析
[parser parse]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"请求失败--%@",error);
}];
} //返回的二进制数据
-(void)httpData
{
//1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; /**
响应体信息默认返回的是json类型:AFN有三种类型,默认json,xml,还有其他,
* 1:注意:如果返回的是xml数据,那么应该修改AFN的解析方案AFXMLParserResponseSerializer,manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; 2:注意:如果返回的数据既不是xml也不是json那么应该修改解析方案为:
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
*/ manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //2.发送GET请求
[manager GET:@"http://120.25.226.186:32812/resources/images/minion_01.png" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task,id _Nullable responseObject) {
NSLog(@"%@-",[responseObject class]); //UIImage *image = [UIImage imageWithData:responseObject];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"请求失败--%@",error);
}];
} /**
* AFN的未知数据类型:像是什么text/html,text/plain,是AFN不支持的,所以必须配置,最好在外部去配置,不要修改AFN内部框架的内容。需要配置两项:1:告诉AFN能够接受text/html类型的数据, manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; 2:若不是json,xml,其他类型的必须配置低三种类型: manager.responseSerializer = [AFHTTPResponseSerializer serializer]。二者缺一不可 */
-(void)httpData2
{
//1.创建会话管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //告诉AFN能够接受text/html类型的数据
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //2.发送GET请求
[manager GET:@"http://www.baidu.com" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task,id _Nullable responseObject) {
NSLog(@"%@-%@",[responseObject class],[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]); //UIImage *image = [UIImage imageWithData:responseObject];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"请求失败--%@",error);
}];
} #pragma mark ----------------------
#pragma mark NSXMLParserDelegate
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
NSLog(@"%@--%@",elementName,attributeDict);
}
@end

/*

1.AFN它内部默认把服务器响应的数据当做json来进行解析,所以如果服务器返回给我的不是JSON数据那么请求报错,这个时候需要设置AFN对响应信息的解析方式。AFN提供了三种解析响应信息的方式,分别是:

1)AFXMLParserResponseSerializer----XML

2) AFHTTPResponseSerializer---------默认二进制响应数据

3)AFJSONResponseSerializer---------JSON

2.还有一种情况就是服务器返回给我们的数据格式不太一致(开发者工具Content-Type:text/xml),那么这种情况也有可能请求不成功。解决方法:

1) 直接在源代码中修改,添加相应的Content-Type

2) 拿到这个属性,添加到它的集合中

3.相关代码

-(void)srializer

{

//1.创建请求管理者,内部基于NSURLSession

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

/* 知识点1:设置AFN采用什么样的方式来解析服务器返回的数据*/

//如果返回的是XML,那么告诉AFN,响应的时候使用XML的方式解析

manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

//如果返回的就是二进制数据,那么采用默认二进制的方式来解析数据

//manager.responseSerializer = [AFHTTPResponseSerializer serializer];

//采用JSON的方式来解析数据

//manager.responseSerializer = [AFJSONResponseSerializer serializer];

/*知识点2 告诉AFN,再序列化服务器返回的数据的时候,支持此种类型

[AFJSONResponseSerializer serializer].acceptableContentTypes = [NSSet setWithObject:@"text/xml"];

//2.把所有的请求参数通过字典的方式来装载,GET方法内部会自动把所有的键值对取出以&符号拼接并最后用?符号连接在请求路径后面

NSDictionary *dict = @{

@"username":@"223",

@"pwd":@"ewr",

@"type":@"XML"

};

//3.发送GET请求

[manager GET:@"http://120.25.226.186:32812/login" parameters:dict success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {

//4.请求成功的回调block

NSLog(@"%@",[responseObject class]);

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

//5.请求失败的回调,可以打印error的值查看错误信息

NSLog(@"%@",error);

}];

}

```

ios开发网络学习AFN三:AFN的序列化的更多相关文章

  1. ios开发网络学习AFN框架的使用一:get和post请求

    #import "ViewController.h" #import "AFNetworking.h" @interface ViewController () ...

  2. ios开发网络学习三:NSURLConnection小文件大文件下载

    一:小文件下载 #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDele ...

  3. ios开发网络学习:一:NSURLConnection发送GET,POST请求

    #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...

  4. ios开发网络学习十二:NSURLSession实现文件上传

    #import "ViewController.h" // ----WebKitFormBoundaryvMI3CAV0sGUtL8tr #define Kboundary @&q ...

  5. ios开发网络学习十一:NSURLSessionDataTask离线断点下载(断点续传)

    #import "ViewController.h" #define FileName @"121212.mp4" @interface ViewControl ...

  6. ios开发swift学习第三天:逻辑分支

    一. 分支的介绍 分支即if/switch/三目运算符等判断语句 通过分支语句可以控制程序的执行流程 二. if分支语句 和OC中if语句有一定的区别 判断句可以不加() 在Swift的判断句中必须有 ...

  7. ios开发网络学习十:利用文件句柄实现大文件下载

    #import "ViewController.h" @interface ViewController ()<NSURLSessionDataDelegate> @p ...

  8. ios开发网络学习九:NSURLSessionDownloadTask实现大文件下载

    一:NSURLSessionDownloadTask:实现文件下载:无法监听进度 #import "ViewController.h" @interface ViewControl ...

  9. ios开发网络学习六:设置队列请求与RunLoop

    #import "ViewController.h" @interface ViewController ()<NSURLConnectionDataDelegate> ...

随机推荐

  1. 用openssl生成含有中文信息的证书

    openssl 支持 ASCII 和 UTF-8 两种编码,应该可以制作中文证书. 在生成证书签发申请时,当输入中文则 openssl 报错,这是因为当前输入的字符是 ANSI 本地编码格式,超出了 ...

  2. 洛谷——P1316 丢瓶盖

    https://www.luogu.org/problem/show?pid=1316 题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想 ...

  3. android 仿ios 对话框已封装成工具类

    对话框 在android中是一种非经常见的交互提示用户的方式,可是非常多产品狗都叫我们这些做android的仿ios,搞的我们android程序猿非常苦逼,凭什么效果老是仿ios,有没有一点情怀,只是 ...

  4. ORACLE10g R2【单实例 FS→单实例FS】

    ORACLE10g R2[单实例FS→单实例FS] 本演示案例所用环境:   primary standby OS Hostname pry std OS Version RHEL5.8 RHEL5. ...

  5. C/S与B/S架构比较

    一C/S 1.C/S概念 C/S是Client/Server的缩写.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系统,如Oracle.Sybase.Informix或 SQL Serv ...

  6. CodeVs——T 3304 水果姐逛水果街Ⅰ

    http://codevs.cn/problem/3304/ 时间限制: 2 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Des ...

  7. Android中的Parcelable接口和Serializable使用方法和差别

    Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...

  8. js进阶 13-4 jquery自定义动画animate()如何使用

    js进阶 13-4 jquery自定义动画animate()如何使用 一.总结 一句话总结:animate(params,[speed],[easing],[fn]),参数:params:一组包含作为 ...

  9. amazeui学习笔记--css(布局相关3)--辅助类Utility

    amazeui学习笔记--css(布局相关3)--辅助类Utility 一.总结 1.元素清除浮动: 添加 am-cf 这个 class 即可 2.水平滚动: .am-scrollable-horiz ...

  10. TabControl控件重绘

    原文地址:http://www.codeproject.com/Articles/91387/Painting-Your-Own-Tabs-Second-Edition 在网上看到重绘TabContr ...