iOS开发之请求设置自定义header

需求

在我们的请求的时候需要上传一个设备信息信息,比如IDFA/IDFV等等信息。

做法

我首先创建一个字典,字典包含一个一个的键值对,然后将字段转成了JSON字符串:

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

然后创建一个NSMutableRequest,然后设置header:

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

然后请求上传之后无法获取到header关于此key"device_info"的信息,百度和谷歌了很久,后面经过一个一个排查,发现是这个json串直接上传上去的话是设置不了的,因为里面包含了很多的转义符,还有双引号等等,然后最后想的是将jsonString再经过一层UTF-8编码:

NSString *newNewString = [jsonString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

然后上传此新的字符串,结果抓包发现头部是有值的,但是后台那边拿不到那个值,后来发现是设置header的key不能包含下划线,比如“Content-Type”也是中划线,所以我"device_info"改成了"device-info",然后就OK,解决问题了...

注意:
UTF-8编码需要注意版本控制,那个方法是在iOS9.0就过期的,但是过期还是能用,只是有警告,具体的新接口请查看API。

你可能感兴趣的:(iOS开发之请求设置自定义header)