關(guān)于AFNetworking設(shè)置Content-Type,請(qǐng)求頭
項(xiàng)目發(fā)送post請(qǐng)求,afn一直報(bào)錯(cuò)415,是后臺(tái)要我返回的數(shù)據(jù)格式為application/json,但afn中設(shè)置application/json也還是不成功,一直報(bào)錯(cuò)text/html,后來(lái)改面用NSURLSession類來(lái)完成請(qǐng)求,設(shè)置了格式為application/json,這樣就可以了。在這只是記錄一下這個(gè)bug。
記錄一下NSURLSession的基本使用
一、簡(jiǎn)單說(shuō)明
在iOS9.0之后,以前使用的NSURLConnection過(guò)期,蘋果推薦使用NSURLSession來(lái)替換NSURLConnection完成網(wǎng)路請(qǐng)求相關(guān)操作。
NSURLSession的使用非常簡(jiǎn)單,先根據(jù)會(huì)話對(duì)象創(chuàng)建一個(gè)請(qǐng)求Task,然后執(zhí)行該Task即可。
NSURLSessionTask本身是一個(gè)抽象類,在使用的時(shí)候,通常是根據(jù)具體的需求使用它的幾個(gè)子類。關(guān)系如下:

二、發(fā)送GET請(qǐng)求
使用NSURLSession發(fā)送GET請(qǐng)求的方法和NSURLConnection類似,整個(gè)過(guò)程如下:
1.確定請(qǐng)求路徑(一般由公司的后臺(tái)開發(fā)人員以接口文檔的方式提供),GET請(qǐng)求參數(shù)直接跟在URL后面
2.創(chuàng)建請(qǐng)求對(duì)象(默認(rèn)包含了請(qǐng)求頭和請(qǐng)求方法【GET】),此步驟可以省略
3.創(chuàng)建會(huì)話對(duì)象(NSURLSession)
4.根據(jù)會(huì)話對(duì)象創(chuàng)建請(qǐng)求任務(wù)(NSURLSessionDataTask)
5.執(zhí)行Task
6.當(dāng)?shù)玫椒?wù)器返回的響應(yīng)后,解析數(shù)據(jù)(XML|JSON|HTTP)
示例代碼:
//1.確定請(qǐng)求路徑
NSURL*url = [NSURLURLWithString:@"http://120.25.226.186:32812/login?username=my&pwd=name&type=JSON"];
//2.創(chuàng)建請(qǐng)求對(duì)象//請(qǐng)求對(duì)象內(nèi)部默認(rèn)已經(jīng)包含了請(qǐng)求頭和請(qǐng)求方法(GET)
NSURLRequest*request = [NSURLRequestrequestWithURL:url];
//3.獲得會(huì)話對(duì)象
NSURLSession*session = [NSURLSessionsharedSession];
//4.根據(jù)會(huì)話對(duì)象創(chuàng)建一個(gè)Task(發(fā)送請(qǐng)求)
NSURLSessionDataTask*dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData* _Nullable data,NSURLResponse* _Nullable response,NSError* _Nullable error) {if(error ==nil) {
//6.解析服務(wù)器返回的數(shù)據(jù)//說(shuō)明:(此處返回的數(shù)據(jù)是JSON格式的,因此使用NSJSONSerialization進(jìn)行反序列化處理)
NSDictionary*dict = [NSJSONSerializationJSONObjectWithData:data options:kNilOptions error:nil];NSLog(@"%@",dict);
}
}];
//5.執(zhí)行任務(wù)
[dataTask resume];
三、發(fā)送POST請(qǐng)求
使用NSURLSession發(fā)送POST請(qǐng)求的方法和NSURLConnection類似,整個(gè)過(guò)程如下:
1)確定請(qǐng)求路徑(一般由公司的后臺(tái)開發(fā)人員以接口文檔的方式提供)
2)創(chuàng)建可變的請(qǐng)求對(duì)象(因?yàn)樾枰薷模瞬襟E不可以省略
3)修改請(qǐng)求方法為POST
4)設(shè)置請(qǐng)求體,把參數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)并設(shè)置請(qǐng)求體
5)創(chuàng)建會(huì)話對(duì)象(NSURLSession)
6)根據(jù)會(huì)話對(duì)象創(chuàng)建請(qǐng)求任務(wù)(NSURLSessionDataTask)
7)執(zhí)行Task
8)當(dāng)?shù)玫椒?wù)器返回的響應(yīng)后,解析數(shù)據(jù)(XML|JSON|HTTP)
//1.創(chuàng)建會(huì)話對(duì)象
NSURLSession*session = [NSURLSessionsharedSession];
//2.根據(jù)會(huì)話對(duì)象創(chuàng)建
NSURL*url = [NSURLURLWithString:@"http://120.25.226.186:32812/login"];
//3.創(chuàng)建可變的請(qǐng)求對(duì)象
NSMutableURLRequest*request = [NSMutableURLRequestrequestWithURL:url];
//4.修改請(qǐng)求方法為
POSTrequest.HTTPMethod =@"POST";
//5.設(shè)置請(qǐng)求體
//告訴服務(wù)器數(shù)據(jù)為json類型
[POSTrequest setValue:@"application/json"forHTTPHeaderField:@"Content-Type"];
//設(shè)置請(qǐng)求體(json類型)
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:@{@"userid":@"123456"} options:NSJSONWritingPrettyPrinted error:nil];
request.HTTPBody= jsonData;
//6.根據(jù)會(huì)話對(duì)象創(chuàng)建一個(gè)Task(發(fā)送請(qǐng)求)
NSURLSessionDataTask*dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData* _Nullable data,NSURLResponse* _Nullable response,NSError* _Nullable error) {
//8.解析數(shù)據(jù)
NSDictionary*dict = [NSJSONSerializationJSONObjectWithData:data options:kNilOptions error:nil];NSLog(@"%@",dict);
}];
//7.執(zhí)行任務(wù)
[dataTask resume];