【问题标题】:Get header data from a request response in swift快速从请求响应中获取标头数据
【发布时间】:2016-08-07 02:31:18
【问题描述】:

我想在标头请求中获取 X-Dem-Auth,并快速将其存储在我的应用中。

查看回复:

headers {
    "Content-Length" = 95;
        "Content-Type" = "application/json; charset=utf-8";
        Date = "Fri, 15 Apr 2016 08:01:58 GMT";
        Server = "Apache/2.4.18 (Unix)";
        "X-Dem-Auth" = null;
        "X-Powered-By" = Express;

【问题讨论】:

    标签: swift api rest http-headers


    【解决方案1】:

    如果响应类型为NSHTTPURLResponse,您可以从response.allHeaderFields 获取标头

    正如苹果文档所说:

    包含作为服务器响应的一部分接收的所有 HTTP 标头字段的字典。通过检查这个字典,客户端可以看到 HTTP 服务器返回的“原始”头信息。

    此字典中的键是从服务器接收的标头字段名称。有关常用 HTTP 标头字段的列表,请参阅 RFC 2616。

    因此,例如要在响应标头中获取 X-Dem-Auth,您可以通过这种方式访问​​它:

    if let httpResponse = response as? NSHTTPURLResponse {
         if let xDemAuth = httpResponse.allHeaderFields["X-Dem-Auth"] as? String {
            // use X-Dem-Auth here
         }
    }
    

    更新

    根据 Evan R 的评论更新

    if let httpResponse = response as? HTTPURLResponse {
         if let xDemAuth = httpResponse.allHeaderFields["X-Dem-Auth"] as? String {
            // use X-Dem-Auth here
         }
    }
    

    【讨论】:

    • 它不起作用,我有一个错误:“NSURLResponse”类型的值?没有成员“allHeaderFields”
    • 你在使用 Alafomofire 吗?
    • 我已经更新了我的答案,请检查一下 :) 如果它不起作用,请提供你得到响应的代码。
    • 如果您将此问题标记为我的回答已解决,那就太好了:)
    • 现在称为HTTPURLResponse 而不是NSHTTPURLResponse
    【解决方案2】:

    适用于 iOS 13 及更高版本的更新。

    我建议如果响应是 HTTPURLResponse 类型并且您只想获取特定的标头值。那么下面是一个更好的方法。

    if let httpResponse = response as? HTTPURLResponse {
         if let xDemAuth = httpResponse.value(forHTTPHeaderField: "X-Dem-Auth") as? String {
            // use X-Dem-Auth here
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      相关资源
      最近更新 更多