服務(wù)器要求客戶端在請(qǐng)求體里面加token進(jìn)行加密 但post請(qǐng)求一直不行,get可以后倆查到原因,做個(gè)記錄.
1.get和post的區(qū)別
get方法,會(huì)將參數(shù)拼接到url中射沟,不安全而且長(zhǎng)度有限制,屬于透?jìng)鳌?br> post方法与境,會(huì)將參數(shù)放到參數(shù)參數(shù)列表中验夯,相對(duì)來(lái)說(shuō)比較安全
2.使用AFNetworking,默認(rèn)HTTPMethodsEncodingParametersInURI里面包含的只有GET
, HEAD
, 和 DELETE
.不知道情況的情況下使用POST方法的話摔刁,會(huì)將用戶傳遞的參數(shù)放到Body里面挥转,導(dǎo)致服務(wù)端通過(guò)request.getParameters()獲取不到參數(shù)。
3.通過(guò)斷點(diǎn)調(diào)試共屈,發(fā)現(xiàn)在requestBySerializingRequest中會(huì)直接跳過(guò)
if ([self.HTTPMethodsEncodingParametersInURI containsObject:[[request HTTPMethod] uppercaseString]])
{
return [super requestBySerializingRequest:request withParameters:parameters error:error];
}
直接走下面的步驟绑谣,然后將請(qǐng)求參數(shù)添加到body里面:
[mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]];
4.解決方法:
HTTPMethodsEncodingParametersInURI 包含POST方法
requestManager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithArray:@[@"POST", @"GET", @"HEAD"]];
這樣就可以解決了。