iOS经常使用网络库之AFNetWorking

  简介

​   
 `AFNetworking`是iOS开发网络API中最经常使用的第三方库,`github`中的`star`数充分说明了它在iOS开发中第三方库中的江湖地位

 github地址:[AFNetworking](https://github.com/AFNetworking/AFNetworking)

 类介绍

 NSURLSession 部分

    AFURLSessionManager  基于NSURLSession,是对NSURLSession的封装并进一步优化使用 其内部其实使用的仍是数据任务、上传任务、下载任务
    AFHTTPSessionManager 继承于AFURLSessionManager 封装了一些HTTP请求操做

 Serialization 部分

 Serialization部分主要是处理请求和响应的

 AFURLRequestSerialization是负责请求的相关设置

    AFURLRequestSerialization    负责管理请求对象中内容的构建,负责管理request的属性等等一些东西  本类对象为manager对象的一个属性
    AFHTTPRequestSerializer       负责管理HTTP请求对象相关的东西 manager默认使用的requestSerializer类型
    AFJSONRequestSerializer       当请求参数为JSON时 使用此类来设置请求
    AFPropertyListRequestSerializer 当请求参数为Plist时 使用此类来设置请求


 AFURLResponseSerialization是负责管理响应的相关设置

     AFHTTPResponseSerializer             负责管理响应对象中内容的构建,负责管理response的属性等等一些东西  本类对象为manager对象的一个属性
     AFJSONResponseSerializer             负责处理JSON  manager对象默认使用的responseSerializer类型
     AFXMLParserResponseSerializer      负责处理XML
     AFPropertyListResponseSerializer   负责处理Plist
     AFImageResponseSerializer            负责处理Image
     AFCompoundResponseSerializer     混合型数据 data

 Additional Functionality

    AFNetworkReachabilityManager  网络连通性 

    AFSecurityPolicy            加密相关

  UIKit相关



   
     GET

1. 访问百度首页

2. 访问糯米API

   接口页面:http://apistore.baidu.com/apiworks/servicedetail/508.html

   APIKey:794a5a140ecc24933911a42c37b5e773
> 响应序列化
> 请求序列化  添加请求头
> 参数都是以字典或数组形式传入



    POST

1. 访问api

   普通请求接口:http://open.weibo.com/wiki/2/statuses/update

   参数都是以字典或数组形式传入


2. multi-part POST

   Multi-Part请求接口:http://open.weibo.com/wiki/2/statuses/upload

   参数:`2.00wzHcQGW4clHD3beba363fa0Tt21m`

   `chengxinyuan4@sina.com`  `chengxinyuan4`



  Tips

   模拟HTTP请求工具

1. Chrome插件:postman
2. Mac App:[Paw](http://xz.cr173.com/soft2/pw.zip)

  使用Cocoapods后import不提示

选择target(就是左边你的工程target)—— BuildSettings —— search Paths 下的 User Header Search Paths,点击“+”号添加一项:而且输入:“$(PODS_ROOT)”(没有引号),选择:recursive(会在相应的目录递归搜索文件)



  问题2

`Request failed: unacceptable content-type: text/plain  text/html`

1. 在当前支持的响应序列化中添加支持不支持的类型

    self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"添加", nil];
2. 切换类型

解释:AF的响应序列化支持一下几种,若是设置的为其中一种,实际返回类型不是那一种,则会报上面错误unacceptable content-type
HTTP:返回data
JSON:返回数组或字典           只支持JSON
XML:返回NSXMLParser        只支持XML
Plist:返回数组或字典
Image:返回image对象
混合数据:返回data

 问题3

```
error:Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set."
```

解释:首先设置的响应类型是JSONSerializer,AF请求到数据后会解析数据,但咱们返回的数据不是JSON格式,是HTML因此AF无力了。。。javascript

相关文章
相关标签/搜索