【问题标题】:Swift get headers from UIWebView responseSwift 从 UIWebView 响应中获取标头
【发布时间】:2017-07-28 05:16:49
【问题描述】:

我无法从 UIWebView 响应中获取标头,因为该响应显然没有被缓存。有解决方法吗?我已经尝试过来自here 的代码。

我的应用程序使用混合的原生 iOS 视图控制器和 UIWebView。当我启动 UIWebView 会话时,我使用密钥链中的身份验证令牌写入 cookie,其中令牌是从 API 登录中保存的。

如果用户在 Web 视图中导航到另一个页面,则 cookie 似乎不正确。我的目标是从每个响应中获取身份验证 cookie,并将其保存为来自服务器的身份验证令牌随每个请求而变化。然后我想将令牌重新添加到新请求中。

下面的代码总是返回 nil。我正在尝试从标头中获取身份验证令牌。

func webViewDidFinishLoad(webView: UIWebView) {
    if let request = webView.request {
        if let resp = NSURLCache.sharedURLCache().cachedResponseForRequest(request) {
            if let response = resp.response as? NSHTTPURLResponse {
                print(response.allHeaderFields)
            }
        }
    }
}

【问题讨论】:

  • 这不是stackoverflow.com/questions/15476539/…的复制品吗?
  • 不,这是一个 Swift 问题。另一个是我不明白的 Obj C。
  • 代码实际上并没有返回任何东西。您能否更具体地说明nil 是哪一部分?是resp,还是response,还是response.allHeaderFields,还是别的什么?
  • if let resp 失败

标签: uiwebview swift3 uiwebviewdelegate


【解决方案1】:

曾为 Swift 3Swift 4Swift 5

func webViewDidFinishLoad(_ webView: UIWebView) { 
    let headers = webView.request?.allHTTPHeaderFields
    for (key,value) in headers! {
        print("key \(key) value \(value)")
    } 
}

【讨论】:

  • 这似乎不是响应。
  • 你到底是什么意思?在 webView.request?.allHTTPHeaderFields 中都是 WebView Url 的响应头
  • 可能是我的错误假设。这些是唯一存在的标题。 key Accept value text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 key User-Agent value Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C89。我希望看到一个身份验证令牌加上常规 cookie。
  • @markhorrocks 您是否使用过 Charles Proxy 之类的工具来查看 actual 响应并确认您期望的字段确实存在?
  • 不,我对 iOS 编码有点陌生。我会试试的。感谢您的提示。
猜你喜欢
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 2016-04-25
  • 2015-11-15
  • 2017-07-19
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
相关资源
最近更新 更多