iOS 8.3更新后,NSMutableURLRequest主体格式不正确
在今天的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;
我查了苹果文档,最近没有任何修改。
是有人遭受相同或知道可以导致这一点?
谢谢。
我把这个评论作为答案在这里:
尝试指出http方法
[request setHTTPMethod:@"POST"]
和/或请求长度
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
和/或内容types
[request setValue:@"application/<YOUR CONTENT TYPE>"forHTTPHeaderField:@"Content-Type"];
我在一个应用程序中也遇到了这个问题。
它看起来可能是iOS 8.3中引入的一个bug。 从官方的框架参考,它是说NSURLSessionConfiguration
的HTTPAdditionalHeaders
属性:
此属性指定根据此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服务器端
- 将contentMode设置为UIViewContentModeScaleAspectFit时,如何设置UIImageView左alignment或右alignment?
- 在iOS 7中检测(侦听)audio路由更改
- Apple开发中的库,API,框架和SDK之间的关系。
- IOS UIWebView:如何向DOM事件添加监听器?
- NSThread现在自动创buildautoreleasepool吗?
- 展开segue不会释放我的视图控制器
- CLLocationManager委托方法没有被调用(谷歌地图是集成的)
- 当用户开始input时更改search器图标
- UITextView startInteractionWithLinkAtPoint仅崩溃iOS 11
- CLLocationManager requestWhenInUseAuthorization()不起作用
- TextView和ImageView在同一单元格中的动态单元格大小