gpt4 book ai didi

ios - 使用内容类型应用程序/JSON iOS 未获得 JSON 响应

转载 作者:行者123 更新时间:2023-12-01 19:00:26 26 4
gpt4 key购买 nike

我收到了 REST我应该得到的客户服务JSON我的 iOS 代码的响应。我正在使用 content-type作为“application/json”,但默认情况下它被视为“text/html”。我在 REST 中交叉检查了这个在我的 Mozilla 浏览器中使用“application/json”作为 content-type 的客户端在标题部分,我可以看到正确的响应。使用下面的代码,我得到一个 400来自服务器的错误。我总是可以看到“text/html”被用作 400 的一部分。默认响应

NSString * strBodyOnlineStart = [NSString stringWithFormat:@"&email=***@***.com&deviceCode=*****&password_value=***"];

NSURL *urlOnlineStart = [NSURL
URLWithString:@"http://local.server/xxxxx"];
NSMutableURLRequest *requestOnlineStart = [NSMutableURLRequest
requestWithURL:urlOnlineStart];


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

[requestOnlineStart setHTTPMethod:@"POST"];
NSData *requestBodyOnlineStart = [strBodyOnlineStart
dataUsingEncoding:NSUTF8StringEncoding];
[requestOnlineStart setHTTPBody:requestBodyOnlineStart];

Below is the response which I am getting from the server

最佳答案

我已经构建了许多服务器 REST 服务和许多移动客户端应用程序来访问它们并无数次遇到此类问题。所以我知道你的痛苦,而且我已经用我自己的工具集解决了这些问题(我喜欢 Windows 上的 Fiddler 和 Mac 上的 Charles),并了解了许多失败的原因。

第一次观察:

如果没有工作请求和响应对的完整详细信息,以及失败的请求和响应对,就不可能找到官方解决方案。但我很确定如果你提供了这些,官方的解决方案会很简单。

测试

为了测试你的问题,我安装了REST client在 Firefox 中并在我的开发机器上设置一个新服务。此外,我在 OS X 上使用带有编辑请求功能的 Charles Proxy 来自定义原始请求。

I cross checked this in a REST client in my Mozilla browser using "application/json" for the content-type in header section and I could see the proper response.



奇怪的是你说它有效。我试过了,服务器无法解析正文值。我使用的服务器端平台不是 ASP.NET,但我只是在使用任何平台的标准预期行为。可能您的 REST 客户端实际上并未提交 header 。我想知道您是否将 header 切换为任意值,例如 application/notjson看看它是否仍然有效(然后我假设它是 REST 客户端覆盖)。

可能原因

如上面的报价,您给人的印象是希望收到 application/json。在回复中 Content-Type header ,您似乎认为您必须发送 Content-Type请求中的 header 以匹配该响应。那 不应该 是必要的。服务器应该能够以标准格式接收您的请求,如 application/x-www-form-urlencoded ,这是典型的服务器,并按照您的预期使用 JSON 响应。

通常,Web 服务器 不要自然接受 json 作为请求正文格式,同样,它们通常为 不要接收传入的请求 Content-Type of application/json。 但是 ,我见过他们这样做的情况。

在任何情况下,使用 提交请求冲突 Content-Type 和正文格式绝对是一个失败的设置。

我发现我的服务器测试响应 JSON,使用您的 &email=***@***.com&deviceCode=*****&password_value=***正文,将标题切换为 application/x-www-form-urlencoded 后,应用程序/json。典型的善良。

代码

尝试注释掉以下行:
    [requestOnlineStart setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

或将其更改为:
    [requestOnlineStart setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

关于ios - 使用内容类型应用程序/JSON iOS 未获得 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23310270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com