请求的数据格式,发送给服务器的格式
self.requestSerializer = [AFHTTPRequestSerializer serializer];
AFHTTPRequestSerializer //二进制的数据格式 (默认的)
AFJSONRequestSerializer //JSON
AFPropertyListRequestSerializer //PList
响应的解析器(默认直接解析JSON)
self.responseSerializer = [AFJSONResponseSerializer serializer];
AFHTTPResponseSerializer 二进制
AFJSONResponseSerializer JSON (默认的数据格式)
AFXMLParserResponseSerializer XML的解析器
AFImageResponseSerializer Image
AFN同样提供了异步加载网络图片的功能
但是:不支持 GIF,只有 SDWebImage 支持
AFCompoundResponseSerializer 组合
遇到的问题
- requestSerializer
关于 requestSerializer它就是AFNetworking参数编码的序列化器,它一共有三种编码格式:
AFHTTPRequestSerializer:第一种是普通的http的编码格式也就是
mid=10&method=userInfo&dateInt=20160818,这种格式的。
AFJSONRequestSerializer:第二种也是json编码格式的,也就是编码成
{"mid":"11","method":"userInfo","dateInt":"20160818"}
AFPropertyListRequestSerializer:第三种没用过,但是看介绍接编码成pislt格式的参数
manager.requestSerializer=[AFJSONRequestSerializer serializer];
//申明请求的数据是json类型
manager.responseSerializer = [AFJSONResponseSerializer serializer];
//申明返回的结果是json类型
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
//如果接受类型不一致请替换一致
常遇到下面的几种情况:
1、 服务端需要返回一段普通文本给客户端,Content-Type="text/plain"
2 、服务端需要返回一段HTML代码给客户端 ,Content-Type="text/html"
3 、服务端需要返回一段XML代码给客户端 ,Content-Type="text/xml"
4 、服务端需要返回一段javascript代码给客户端 Content-Type="text/javascript "
5 、服务端需要返回一段json串给客户端 Content-Type="application/json
要使用常规的AFN网络访问
1. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
所有的网络请求,均有manager发起
2. 需要注意的是,默认提交请求的数据是二进制的,返回格式是JSON
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
1> 如果提交数据是JSON的,需要将请求格式设置为AFJSONRequestSerializer
2> 如果返回格式不是JSON的,
3. 请求格式
AFHTTPRequestSerializer 二进制格式
AFJSONRequestSerializer JSON
AFPropertyListRequestSerializer PList(是一种特殊的XML,解析起来相对容易)
4. 返回格式
AFHTTPResponseSerializer 二进制格式
AFJSONResponseSerializer JSON
AFXMLParserResponseSerializer XML,只能返回XMLParser,还需要自己通过代理方法解析
AFXMLDocumentResponseSerializer (Mac OS X)
AFPropertyListResponseSerializer PList
AFImageResponseSerializer Image
AFCompoundResponseSerializer 组合
如何将token添加到请求头?
问题一: 添加token到请求头的代码如下:
NSDictionary *dict = @{@"name" : @"小明",
@"age" :@"20"
};
//实例化AFHTTPSessionManager
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//调出请求头
manager.requestSerializer = [AFJSONRequestSerializer serializer];
//将token封装入请求头
[manager.requestSerializer setValue:TOKEN forHTTPHeaderField:@"token-id"];
网络链接
#pragma mark - 检测网络连接
- (void)reach
{
/**
AFNetworkReachabilityStatusUnknown = -1, // 未知
AFNetworkReachabilityStatusNotReachable = 0, // 无连接
AFNetworkReachabilityStatusReachableViaWWAN = 1, // 3G 花钱
AFNetworkReachabilityStatusReachableViaWiFi = 2, // 局域网络,不花钱
*/
// 如果要检测网络状态的变化,必须用检测管理器的单例的startMonitoring
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
// 检测网络连接的单例,网络变化时的回调方法
[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"%d", status);
}];
}