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。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,179评论 19 139
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 9,713评论 4 16
  • 2004年的热播剧《宫锁连城》播出,随后琼瑶随即指出这部剧集是于正抄袭她的作品《梅花烙》,于正对此予以否认。同...
    绯夏阅读 1,742评论 0 1
  • 还记得前些天的网上闹得沸沸扬扬的闹得沸沸扬扬的"时间窗格"APP嘛?将一个人的一生大概寿命规划为75岁,用一张窗...
    小高斯阅读 2,350评论 0 0
  • 当流星划过夜空,我把我虔诚的灵魂寄给了远方的你! 严禹豪!我来了!这是秦楠楠第一次对着加拿大的蓝天喊出了...
    箭袋阅读 4,300评论 2 1

友情链接更多精彩内容