使用AFN調(diào)用后臺接口的坑

記錄一下今天下午爬了一下午的坑吧~

前幾天新開一個新的app,界面的搭建的七七八八了,接口也出了一部分,今天加班就準備調(diào)一下接口試試水,然后就是一下午的爬坑過程。

首先,調(diào)用后臺的登陸接口,很順利,后臺斷點攔截到了我的請求,我天真的以為接口就這么ok了,可是發(fā)現(xiàn)后臺給我在數(shù)據(jù)庫里面添加的賬號登陸不成功。叫后臺的小伙伴幫忙看看,后臺攔截我的請求發(fā)現(xiàn),我傳給他的參數(shù)他取不到值。

好了,問題來了,我正常的使用post請求,請求也過去了,他為啥就是拿不到我的參數(shù)呢?

剛開始的時候以為是后臺寫的有問題,他們改了幾次,發(fā)現(xiàn)還是取不到我傳過去的參數(shù),然后安卓的小伙子也過來了,說他們也試試,結(jié)果就是他們很順利的調(diào)成功了,后臺也是一把就拿到他們傳過去的參數(shù)。

沒辦法了,問題應該就是在我們iOS這邊了,一步步的走請求的流程也沒看出什么不一樣的啊。。。。。我也不能改AFN的內(nèi)部代碼吧

試了幾次發(fā)現(xiàn)問題并沒有解決,然后就灰溜溜的拿上一個項目的網(wǎng)絡請求試了一下,結(jié)果還是一樣,他們是真的拿不到我傳過去的參數(shù)。我用postMan調(diào)用接口的時候,他們是可以拿到參數(shù)的。問了一下,后臺說參數(shù)是放在body里面的,我趕緊問了一下跟我一起開發(fā)的iOS同伙,他說參數(shù)不是放在body里面的,我就照著上個項目里面的把請求方法改了,把參數(shù)放body里面去了,然后試了一把,心里默默祈禱能夠成功,結(jié)果并沒有什么用。心里真的是賊急躁,今天怕是不搞定回不去了。

找不到問題在哪,找不到問題在哪,找不到問題在哪。

默默的拿出很久以前的項目又重新試了一次,還是調(diào)這個借口,一問后臺,小伙伴說有數(shù)據(jù)了,沒錯有數(shù)據(jù)了,可把我給高興壞了。慢慢的就對照著請求方法一行一行的看,沒看出問題,兩邊寫的都一樣的啊。打開sharedClient一看,發(fā)現(xiàn)不一樣的了

我們app這么寫的

+ (instancetype)sharedClient {
    static NetWorkClient *sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSURL *baseUrl = [NSURL URLWithString:[NetWorkConfig sharedConfig].baseUrl];
        //解決AFN中relativeToURL:self.baseURL方法去掉尾部字符串問題,實際作用是給baseUrl后面拼一個'/'
        baseUrl = [baseUrl URLByAppendingPathComponent:@""];
        sharedClient = [[NetWorkClient alloc] initWithBaseURL:baseUrl];
        sharedClient.responseSerializer = [AFJSONResponseSerializer serializer];
        sharedClient.requestSerializer = [AFJSONRequestSerializer serializer];
        [sharedClient.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
        [sharedClient.requestSerializer setValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
    
    });
    return sharedClient;
}

以前app是這么寫的

+ (instancetype)sharedClient {
    static NetWorkClient *sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSURL *baseUrl = [NSURL URLWithString:[NetWorkConfig sharedConfig].baseUrl];
        //解決AFN中relativeToURL:self.baseURL方法去掉尾部字符串問題,實際作用是給baseUrl后面拼一個'/'
        baseUrl = [baseUrl URLByAppendingPathComponent:@""];
        sharedClient = [[NetWorkClient alloc] initWithBaseURL:baseUrl];
        ((AFJSONResponseSerializer *)sharedClient.responseSerializer).removesKeysWithNullValues = YES;
        // 設置非校驗證書模式
        sharedClient.securityPolicy.allowInvalidCertificates = YES;
        [sharedClient.securityPolicy setValidatesDomainName:NO];
    
    });
    return sharedClient;
}

我還以為是下面3句話起作用了

((AFJSONResponseSerializer *)sharedClient.responseSerializer).removesKeysWithNullValues = YES;
// 設置非校驗證書模式
sharedClient.securityPolicy.allowInvalidCertificates = YES;
[sharedClient.securityPolicy setValidatesDomainName:NO];

后面經(jīng)過多次測試發(fā)現(xiàn)這個并沒有什么影響,主要問題是出在下面4句話上面

sharedClient.responseSerializer = [AFJSONResponseSerializer serializer];
sharedClient.requestSerializer = [AFJSONRequestSerializer serializer];        
[sharedClient.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[sharedClient.requestSerializer setValue:@"application/json;charset=UTF-8" forHTTPHeaderField:@"Content-Type"];

只要一設置這個,后臺就拿不到我給他們的參數(shù)值。

但是不知道為啥設置了這個他們就拿不到我們傳的參數(shù),去問了一下同事,他叫我抓包看看請求的request和response,恩,好注意,我看不太懂抓包的數(shù)據(jù),請來大神同伴過來幫忙看一下,下面是調(diào)用成功時返回的數(shù)據(jù)


成功.png

再來看看把上面4行代碼加上,設置了requestSerializer以后,后臺獲取不到數(shù)據(jù)的時的數(shù)據(jù)

失敗.png

我并沒有看出問題在哪里,同伴說設置了requestSerializer之后,我們傳過去的參數(shù)是json數(shù)據(jù)類型的,他們沒拿到,如果不設置requestSerializer的話,我們傳過去的參數(shù)是Form表單數(shù)據(jù)。

問題所在.png

問題終于解決了。。。。。
雖然不知道到底是不是這個問題,但是還是記錄一下整個下午解決這個問題的過程吧~

有知道這個問題到底是為啥的大神,請指正,謝謝

慢慢來,一步一個巴掌印~~~

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • 最近,一個同事打算離職,聊到技術(shù)上,就順便說道一個話題:AFN的底層原理你知道嗎? 恰好,最近正好處于三個項目交接...
    幸福曉杰2016閱讀 507評論 0 1
  • iOS網(wǎng)絡架構(gòu)討論梳理整理中。。。 其實如果沒有APIManager這一層是沒法使用delegate的,畢竟多個單...
    yhtang閱讀 5,466評論 1 23
  • 只要能讓我忘記你,我怎樣都可以。 曾經(jīng)的心那么真,不是撕去幾頁掛歷就能忘記。 如果有記憶大師,請儲存那過去的記憶。
    情海無涯閱讀 228評論 0 0
  • 我怎么如此幸運:我可以帶著2017年所有的回憶登上2018新一紀生命列車! 我怎么如此幸運:2017年籌備裝修國粹...
    國粹堂1閱讀 215評論 0 3

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