請求的數據格式,發送給服務器的格式
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);
}];
}