美文网首页iosios开发之路
使用AFNetworking所犯的低级错误

使用AFNetworking所犯的低级错误

作者: Smallwolf_JS | 来源:发表于2017-11-13 18:39 被阅读1518次

请求的数据格式,发送给服务器的格式

 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);  
    }];  
} 

相关文章

网友评论

    本文标题:使用AFNetworking所犯的低级错误

    本文链接:https://www.haomeiwen.com/subject/lnozmxtx.html