GET和POST請求不到數(shù)據(jù)
在項目中遇到一個bug:
- 就是請求的參數(shù)和代碼那些都是對的,和安卓的也比較了腻异,但是安卓的可以請求到數(shù)據(jù)诈茧,但是我就是請求不到數(shù)據(jù),而且不僅僅是GET捂掰,POST也請求不到敢会。
- 但是用原來的老域名也可以請求成功曾沈,但是新域名就是請求不成功,后來經(jīng)過很久的摸索和請教鸥昏,終于找到問題所在塞俱。
那就是和域名有關(guān),所以就和AFNetworking有關(guān)吏垮,在AFSecurityPolicy類中加上self.validatesDomainName = YES;
這么一句代碼障涯,即要對證書中的domain這一個字段進行校驗。因為我們后臺好像對域名做了一些操作膳汪,所以必須要加上這句代碼才能請求到數(shù)據(jù)唯蝶。
詳細了解可以看這篇文章 正確使用AFNetworking的SSL保證網(wǎng)絡(luò)安全
只是POST請求不到數(shù)據(jù)
雖然前面的問題解決了,而后在項目中又遇到了一個非常詭異的bug遗嗽,那就是我的POST請求總是不成功粘我,而安卓的卻可以,我們傳的參數(shù)等等都是一樣一樣的痹换,后來經(jīng)過我換了各種POST請求方式征字,都不成功,確定代碼沒有問題娇豫。
后來和后臺匙姜,再和安卓多方面溝通,才知道安卓POST請求參數(shù)傳的是josn格式的冯痢,而我傳的參數(shù)是字典格式的氮昧,所以我們兩個的格式不一樣,后臺的兩個判斷中浦楣,我傳的那種格式的判斷沒有通過郭计。所以當確定自己這邊沒有問題過后,一定要和后臺那邊多溝通進行解決椒振,因為有的問題不是你一個人就能解決掉的。
字典實質(zhì)就是一對對key-value的鍵值對梧乘,一般的傳到后臺后澎迎,都統(tǒng)一轉(zhuǎn)化為josn格式,老項目一般轉(zhuǎn)化為XML格式选调,方便查詢編程夹供。
另外當網(wǎng)絡(luò)請求異常的時候,我們可以這樣來進行分析:
1仁堪、在AFURLSessionManager類里面的
- (void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data
{
//接受數(shù)據(jù)(網(wǎng)絡(luò)原始數(shù)據(jù))
// NSLog(@"網(wǎng)絡(luò)原始數(shù)據(jù):%s", [data bytes]);
AFURLSessionManagerTaskDelegate *delegate = [self delegateForTask:dataTask];
[delegate URLSession:session dataTask:dataTask didReceiveData:data];
if (self.dataTaskDidReceiveData) {
self.dataTaskDidReceiveData(session, dataTask, data);
}
}
方法中打印網(wǎng)絡(luò)的原始數(shù)據(jù)哮洽。
2、如果沒有收到數(shù)據(jù)弦聂,就往響應(yīng)頭那邊查鸟辅。
3氛什、 一般有數(shù)據(jù)的, 異常的話 要么url有問題匪凉,要么參數(shù)有問題枪眉,要么https有問題, 這三個沒問題再层,基本上都會有數(shù)據(jù)贸铜, 響應(yīng)頭數(shù)據(jù)不標準,會在完成的時候做處理聂受,即這個方法:
- (void)URLSession:(__unused NSURLSession *)session
task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error
4蒿秦、關(guān)于HTTPS的方法:
- (void)URLSession:(NSURLSession *)session
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
5、關(guān)于響應(yīng)頭的方法蛋济,http會走這個方法棍鳖,HTTPS只要查上面的方法就可以了
- (void)URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler