AFNetworking設(shè)置Content-Type無(wú)果

關(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];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容