關于AFNetworking設置Content-Type,請求頭
項目發送post請求,afn一直報錯415,是后臺要我返回的數據格式為application/json,但afn中設置application/json也還是不成功,一直報錯text/html,后來改面用NSURLSession類來完成請求,設置了格式為application/json,這樣就可以了。在這只是記錄一下這個bug。
記錄一下NSURLSession的基本使用
一、簡單說明
在iOS9.0之后,以前使用的NSURLConnection過期,蘋果推薦使用NSURLSession來替換NSURLConnection完成網路請求相關操作。
NSURLSession的使用非常簡單,先根據會話對象創建一個請求Task,然后執行該Task即可。
NSURLSessionTask本身是一個抽象類,在使用的時候,通常是根據具體的需求使用它的幾個子類。關系如下:
二、發送GET請求
使用NSURLSession發送GET請求的方法和NSURLConnection類似,整個過程如下:
1.確定請求路徑(一般由公司的后臺開發人員以接口文檔的方式提供),GET請求參數直接跟在URL后面
2.創建請求對象(默認包含了請求頭和請求方法【GET】),此步驟可以省略
3.創建會話對象(NSURLSession)
4.根據會話對象創建請求任務(NSURLSessionDataTask)
5.執行Task
6.當得到服務器返回的響應后,解析數據(XML|JSON|HTTP)
示例代碼:
//1.確定請求路徑
NSURL*url = [NSURLURLWithString:@"http://120.25.226.186:32812/login?username=my&pwd=name&type=JSON"];
//2.創建請求對象//請求對象內部默認已經包含了請求頭和請求方法(GET)
NSURLRequest*request = [NSURLRequestrequestWithURL:url];
//3.獲得會話對象
NSURLSession*session = [NSURLSessionsharedSession];
//4.根據會話對象創建一個Task(發送請求)
NSURLSessionDataTask*dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData* _Nullable data,NSURLResponse* _Nullable response,NSError* _Nullable error) {if(error ==nil) {
//6.解析服務器返回的數據//說明:(此處返回的數據是JSON格式的,因此使用NSJSONSerialization進行反序列化處理)
NSDictionary*dict = [NSJSONSerializationJSONObjectWithData:data options:kNilOptions error:nil];NSLog(@"%@",dict);
}
}];
//5.執行任務
[dataTask resume];
三、發送POST請求
使用NSURLSession發送POST請求的方法和NSURLConnection類似,整個過程如下:
1)確定請求路徑(一般由公司的后臺開發人員以接口文檔的方式提供)
2)創建可變的請求對象(因為需要修改),此步驟不可以省略
3)修改請求方法為POST
4)設置請求體,把參數轉換為二進制數據并設置請求體
5)創建會話對象(NSURLSession)
6)根據會話對象創建請求任務(NSURLSessionDataTask)
7)執行Task
8)當得到服務器返回的響應后,解析數據(XML|JSON|HTTP)
//1.創建會話對象
NSURLSession*session = [NSURLSessionsharedSession];
//2.根據會話對象創建
NSURL*url = [NSURLURLWithString:@"http://120.25.226.186:32812/login"];
//3.創建可變的請求對象
NSMutableURLRequest*request = [NSMutableURLRequestrequestWithURL:url];
//4.修改請求方法為
POSTrequest.HTTPMethod =@"POST";
//5.設置請求體
//告訴服務器數據為json類型
[POSTrequest setValue:@"application/json"forHTTPHeaderField:@"Content-Type"];
//設置請求體(json類型)
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:@{@"userid":@"123456"} options:NSJSONWritingPrettyPrinted error:nil];
request.HTTPBody= jsonData;
//6.根據會話對象創建一個Task(發送請求)
NSURLSessionDataTask*dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData* _Nullable data,NSURLResponse* _Nullable response,NSError* _Nullable error) {
//8.解析數據
NSDictionary*dict = [NSJSONSerializationJSONObjectWithData:data options:kNilOptions error:nil];NSLog(@"%@",dict);
}];
//7.執行任務
[dataTask resume];