iOS 8.3更新后NSMutableURLRequest正文格式错误

时间:2015-04-09 01:39:36

标签: ios objective-c json post

在今天的iOS 8.3更新之前,我的代码工作正常,但在更新服务器后开始拒绝请求,因为它无法找到JSON数据。

我发现iOS正在发送错误的应用程序/ x-www-form-urlencoded文本(未正确编码,因为它似乎是JSON对象):

Wireshark screenshot showing wrong data

这是我期望发送的内容(以及8.2发送的内容): Wireshark screenshot showing expected object

正如我所说,这只发生在iOS 8.3上(我刚刚在iOS模拟器上尝试过8.2并且它有效)。

我认为问题出现在这些行中的一个类中:

NSData *bodyData = [NSJSONSerialization dataWithJSONObject:requestDict options:0 error:nil];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPBody = bodyData;

我检查了Apple文档,最近没有一个显示为修改过。

是否有人遭受同样的痛苦或知道是什么导致这种情况?

感谢。

3 个答案:

答案 0 :(得分:11)

我也在一个应用程序中遇到过这个问题。

看起来它可能是iOS 8.3中引入的错误。从官方框架参考中可以看出NSURLSessionConfiguration的{​​{1}}属性:

  

此属性指定基于此配置添加到会话中的所有任务的其他标头。例如,您可以设置User-Agent标头,以便它自动包含在您的应用根据此配置通过会话进行的每个请求中。

根据我的理解,此配置中的Content-Type集应自动包含在通过此会话发出的每个请求中,自8.3以来不再是这种情况。我已经提交了雷达。

更新:雷达已被设置为“重复”。另一个,所以它更可能是一个错误。

正如Luca所指出的,解决方法是直接在请求上设置Content-Type:

HTTPAdditionalHeaders

来源: https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSURLSessionConfiguration_class/#//apple_ref/occ/instp/NSURLSessionConfiguration/HTTPAdditionalHeaders

答案 1 :(得分:7)

我把评论作为答案在这里:

尝试指示http方法,如

[request setHTTPMethod:@"POST"]

和/或请求长度

[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 

和/或内容类型

[request setValue:@"application/<YOUR CONTENT TYPE>"forHTTPHeaderField:@"Content-Type"];

答案 2 :(得分:0)

似乎iOS 8.3引入了这个。在我的网站上,我们发现了(json)正文未在请求中设置的问题。

调试时尝试调试服务器端