在 Alamofire 中获取 HTTP 状态行

Posted

技术标签:

【中文标题】在 Alamofire 中获取 HTTP 状态行【英文标题】:Get HTTP Status-Line in Alamofire 【发布时间】:2017-03-20 17:35:08 【问题描述】:

我在 swift 3 中使用 Alamofire 4.0.1 库;我正在寻找 HTTP 状态行(如 https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html 中所述)。我可以获取状态码、标题、所有内容,但不能获取状态消息。

我正在查询一个 REST API,它在描述问题的“禁止”关键字之后给了我 403 条不同消息的响应:比如客户端未获准访问或不允许访问特定 URL,因为它是用于内部仅使用。在我的客户端访问 API 时,我想为用户提供更多详细信息,而不仅仅是“禁止”消息。

这是服务器发回的内容(我知道这一点是因为我使用了 Paw,一个 HTTP 客户端来发送 HTTP 请求并调查响应):

HTTP/1.0 403 Forbidden(内部方法)

所以总结一下,有没有机会在 Alamofire 中获得 HTTP 状态行?

【问题讨论】:

使用状态行传递错误消息非常罕见(我从未听说过)。使用 403 并在响应正文中、JSON 对象或任何对您有意义的格式中包含消息会更常见。 感谢您的意见,我已将反馈转发给 API 所有者。 【参考方案1】:

很遗憾没有

Alamofire 使用 URLResponse 并且它没有实现任何为您提供有关 Status-Line 信息的字段/方法。要获得Status-Line,您应该使用其他可能较低级别的框架。

URLResponse 只为您提供有关allHeaderFields 的信息,您可以在这里查看我的回答:

https://***.com/a/36524454/5433235

【讨论】:

这里有类似的问题***.com/a/18905087/5433235 不完全是我想听到的,但感谢您确认它不受支持。我需要和那个 API 人谈谈 :-)

以上是关于在 Alamofire 中获取 HTTP 状态行的主要内容,如果未能解决你的问题,请参考以下文章

使用 alamofire 和 Swift4 IOS 获取 XML HTTP url 的响应

验证 HTTP 200 和 500 状态码的 Alamofire 响应

swift上的Alamofire返回状态代码问题

如何在 Alamofire Swift 中刷新 JWT 令牌状态代码 500

使用 Alamofire 从 API 获取数据时出错

使用 Alamofire 调用带有 HTTP Header 和 Body 的 API