關(guān)于http請求與AFNetworking

前言

眾所周知,在我們移動端與服務(wù)器端進行數(shù)據(jù)請求提交時,需要根據(jù)服務(wù)器端要求的請求方式去調(diào)用接口,所以在開發(fā)中會經(jīng)常配合服務(wù)器端進行接口調(diào)試。有些情況接口不通可能不是服務(wù)器端接口的問題,而是移動端請求的方式?jīng)]有按照服務(wù)器端的要求。當(dāng)你看完這篇文章后,定能與服務(wù)器端無障礙調(diào)試接口。

簡單了解下http請求

1.請求方法:一般我們想服務(wù)器請求數(shù)據(jù)時,基本上都使用GET或POST方法,除了GET和POST,請求方法還有DELETE,PUT, HEAD等其他方法。
  • HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
  • HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
  • 這里以GET和POST為例,GET和POST有個最大區(qū)別:就是GET的請求參數(shù)以 "?key0=value0&key1=value1" 形式拼接在URL后面,而POST則將參數(shù)封裝在request body內(nèi)。但并不是說GET方法就必須把參數(shù)拼接在URL上,也不是說POST方法就必須把參數(shù)封裝在request body內(nèi),參數(shù)位置與請求方法是相對獨立的,并不互相影響。
2.content-type:內(nèi)容類型,分為請求頭類型和響應(yīng)頭類型
  • 響應(yīng)頭類型也就是我們從服務(wù)器端請求到的數(shù)據(jù)格式,目前大多數(shù)是這樣設(shè)置
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain",nil];

  • 請求頭類型,由于GET請求參數(shù)默認(rèn)拼接在URL上,所以一般我們都是POST方法請求,這個在開發(fā)中我們大多數(shù)都是采用默認(rèn)的格式,原生Form表單: "application/x-www-form-urlencoded",但有的服務(wù)器端可能要求''application/json"格式。
// 設(shè)置請求頭content-type  "application/json"
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
// sessionManager.requestSerializer如果不賦值新的AFHTTPRequestSerializer對象,AFN則默認(rèn)創(chuàng)建Form表單: "application/x-www-form-urlencoded"的requestSerializer

AFNetworking github上的介紹

image.png
3.請求參數(shù)的封裝位置:簡單來說就是要不要把參數(shù)放在request body里,AFNetworking的設(shè)置方式
AFHTTPSessionManager *sessionManager = [AFHTTPSessionManager manager];
// NSSet內(nèi)元素為請求方法,當(dāng)調(diào)用這些請求方法時,AFN會將參數(shù)以query string格式拼接到URL后面,除了GET,HEAD之外的請求方法的參數(shù)都將封裝在request body內(nèi)
sessionManager.requestSerializer.HTTPMethodsEncodingParametersInURI = [NSSet setWithObjects:@"GET", @"HEAD", nil];

AFNetworking 源碼
/**
 HTTP methods for which serialized requests will encode parameters as a query string. `GET`, `HEAD`, and `DELETE` by default.
 */
@property (nonatomic, strong) NSSet <NSString *> *HTTPMethodsEncodingParametersInURI;

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

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

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