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

时间:2014-02-18 16:32:27

标签: ios objective-c http http-headers http-status-codes

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

406 Not Acceptable: User is already logged in 406 Not Acceptable: Missing password field 406 Not Acceptable: Node does not exist.

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

NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;

NSInteger statusCode = [HTTPResponse statusCode];

[NSHTTPURLResponse localizedStringForStatusCode:HTTPResponse.statusCode];

但是我确实需要原因短语消息才能知道如何处理响应。我怎样才能获得它,最好使用标准的iOS SDK?

3 个答案:

答案 0 :(得分:1)

  

我确实需要原因短语消息才能知道如何处理响应。

然后API被破坏了。原因短语只是一个调试辅助工具。这并不意味着告知客户行为。

来自RFC 2616 § 6.1.1

  

状态代码适用于自动机,而Reason-Phrase适用于人类用户。客户无需检查或显示Reason-Phrase。

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

答案 1 :(得分:0)

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

  

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

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

答案 2 :(得分:0)

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

http://allseeing-i.com/ASIHTTPRequest/

在我的案例中使用AFNetworking和NSURLSession就像这样简单。