在今天的iOS 8.3更新之前,我的代码工作正常,但在更新服务器后开始拒绝请求,因为它无法找到JSON数据。
我发现iOS正在发送错误的应用程序/ x-www-form-urlencoded文本(未正确编码,因为它似乎是JSON对象):
这是我期望发送的内容(以及8.2发送的内容):
正如我所说,这只发生在iOS 8.3上(我刚刚在iOS模拟器上尝试过8.2并且它有效)。
我认为问题出现在这些行中的一个类中:
NSData *bodyData = [NSJSONSerialization dataWithJSONObject:requestDict options:0 error:nil];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPBody = bodyData;
我检查了Apple文档,最近没有一个显示为修改过。
是否有人遭受同样的痛苦或知道是什么导致这种情况?
感谢。
答案 0 :(得分:11)
我也在一个应用程序中遇到过这个问题。
看起来它可能是iOS 8.3中引入的错误。从官方框架参考中可以看出NSURLSessionConfiguration
的{{1}}属性:
此属性指定基于此配置添加到会话中的所有任务的其他标头。例如,您可以设置User-Agent标头,以便它自动包含在您的应用根据此配置通过会话进行的每个请求中。
根据我的理解,此配置中的Content-Type集应自动包含在通过此会话发出的每个请求中,自8.3以来不再是这种情况。我已经提交了雷达。
更新:雷达已被设置为“重复”。另一个,所以它更可能是一个错误。
正如Luca所指出的,解决方法是直接在请求上设置Content-Type:
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)正文未在请求中设置的问题。
调试时尝试调试服务器端