iOS開發(fā)之請求設置自定義header

需求

在我們的請求的時候需要上傳一個設備信息信息,比如IDFA/IDFV等等信息。

做法

我首先創(chuàng)建一個字典,字典包含一個一個的鍵值對,然后將字段轉成了JSON字符串:

NSError *parseError = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&parseError];
NSString *jsonString = [[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding] autorelease];

然后創(chuàng)建一個NSMutableRequest,然后設置header:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setValue: jsonString forHTTPHeaderField:@"device_info"];

然后請求上傳之后無法獲取到header關于此key"device_info"的信息,百度和谷歌了很久,后面經(jīng)過一個一個排查,發(fā)現(xiàn)是這個json串直接上傳上去的話是設置不了的,因為里面包含了很多的轉義符,還有雙引號等等,然后最后想的是將jsonString再經(jīng)過一層UTF-8編碼:

NSString *newNewString = [jsonString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

然后上傳此新的字符串,結果抓包發(fā)現(xiàn)頭部是有值的,但是后臺那邊拿不到那個值,后來發(fā)現(xiàn)是設置header的key不能包含下劃線,比如“Content-Type”也是中劃線,所以我"device_info"改成了"device-info",然后就OK,解決問題了...

注意:
UTF-8編碼需要注意版本控制,那個方法是在iOS9.0就過期的,但是過期還是能用,只是有警告,具體的新接口請查看API。

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

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

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