iOS 8.3更新后,NSMutableURLRequest主体格式不正确

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

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

Wireshark屏幕截图显示错误的数据

这是我期望发送的(以及在8.2发送的): Wireshark截图显示预期的对象

正如我所说,这只发生在iOS 8.3(我刚刚尝试在iOS模拟器8.2和它的工作原理)。

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

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

我查了苹果文档,最近没有任何修改。

是有人遭受相同或知道可以导致这一点?

谢谢。

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

尝试指出http方法

 [request setHTTPMethod:@"POST"] 

和/或请求长度

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

和/或内容types

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

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

它看起来可能是iOS 8.3中引入的一个bug。 从官方的框架参考,它是说NSURLSessionConfigurationHTTPAdditionalHeaders属性:

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

据我所知,在这个configuration中的一个Content-Type集合应该被自动包含在通过这个会话的每个请求中,而这从8.3开始就不再是这样了。 我已经提交了一个雷达。

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

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

 [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

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

看来,iOS 8.3引入了这一点。 在我的网站,我们发现(json)正文没有正确设置在请求内部的问题。

debugging时也尝试debugging服务器端