Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS/Obj-c-获取HTTP状态代码响应消息(原因短语)_Ios_Objective C_Http_Http Headers_Http Status Codes - Fatal编程技术网

iOS/Obj-c-获取HTTP状态代码响应消息(原因短语)

iOS/Obj-c-获取HTTP状态代码响应消息(原因短语),ios,objective-c,http,http-headers,http-status-codes,Ios,Objective C,Http,Http Headers,Http Status Codes,我正在使用一个API,该API为许多不同的错误发回HTTP 406,并附带一条自定义消息(原因短语)。它可能看起来像: 406不可接受:用户已登录 406不可接受:缺少密码字段 406不可接受:节点不存在。 我可以使用以下方法获取406状态代码和标准“不可接受”字符串: NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response; NSInteger statusCode = [HTTPResponse statusCode]

我正在使用一个API,该API为许多不同的错误发回HTTP 406,并附带一条自定义消息(原因短语)。它可能看起来像:

406不可接受:用户已登录
406不可接受:缺少密码字段
406不可接受:节点不存在。

我可以使用以下方法获取406状态代码和标准“不可接受”字符串:

NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;

NSInteger statusCode = [HTTPResponse statusCode];

[NSHTTPURLResponse localizedStringForStatusCode:HTTPResponse.statusCode];
然而,我确实需要原因短语消息来知道如何处理响应。我如何获得它,最好使用标准的iOS SDK

我真的需要原因短语消息来知道如何处理响应

然后API被破坏了。原因短语仅用于调试辅助。这并不是为了告知客户的行为

发件人:

状态代码供自动机使用,原因短语供人类用户使用。客户端不需要检查或显示原因短语


如果只有状态代码无法传达有关响应的信息,则应将其放在标题或响应正文中。原因短语不是放置客户端使用所需信息的正确位置。

状态代码406表示服务器无法使用请求中指定的accept标头进行响应

406不可接受请求的资源只能根据请求中发送的接受头生成不可接受的内容

这些错误代码不是特定于iOS的。如果您想基于不同的发生原因显示不同的消息,我想您应该使用API/web服务器进行检查,并在代码中使用条件来显示每个消息的自定义消息。

最终,您可以使用ASIHTTPRequest库获得原因短语


在我的案例中,它的使用与AFNetworking和NSURLSession一样简单。

是的,但作为一名应用程序开发人员,我无法控制其他人的坏API,我只能处理它。在本例中,需要解析406原因短语。那么,这是可能的吗?您可以通过自己实现HTTP来实现,但这将是一项巨大的任务。解决这个问题的正确方法是用任何API来归档一个bug,因为它从根本上被破坏了。你可以告诉我们你使用的是什么API,这样我们都可以避免它。这个API所做的事情是非常愚蠢的。在您向我们展示的三个错误原因中,第一个不应该是错误,第二个应该是401,第三个应该是402。如果网站不能做到这一点,你怎么能相信它?这个问题是重复的,请参阅:-这对我们帮助不大,因为也没有解决方案。