从 UIWebView 响应中获取 Swift 的头文件

5

我无法从UIWebView响应中获取头信息,因为响应显然还没有被缓存。 有没有变通方法? 我已经尝试了这里的代码。

我的应用程序使用混合本机iOS视图控制器和UIWebView。 当我开始UIWebView会话时,我会写入一个Cookie,其中包含来自我的密钥链的auth token,其中token是从API登录保存的。

如果用户在Web视图中导航到另一个页面,则Cookie似乎不正确。 我的目标是从每个响应中获取auth cookie并将其保存为服务器端的auth token随每个请求而更改。 然后,我想将令牌添加回新请求中。

下面的代码始终返���nil。 我正在尝试从标题中获取auth token。

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)
            }
        }
    }
}

这不是 https://dev59.com/jWUp5IYBdhLWcg3wJlAH 的重复吗? - matt
不,这是一个关于Swift的问题。另一个是我不理解的Obj C。 - markhorrocks
代码实际上从来没有“返回”任何东西。你能更具体地说明哪一部分是nil吗?是resp,还是response,或者是response.allHeaderFields,还是其他什么东西? - Caleb
如果 if let resp 失败 - markhorrocks
1个回答

1

适用于 Swift 3Swift 4Swift 5

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

这似乎不是响应。 - markhorrocks
@markhorrocks 你有使用过像 Charles Proxy 这样的工具来查看实际响应并确认你期望的字段是否真的存在吗? - Caleb
不,我在iOS编程方面还是新手。我会尝试的。谢谢你的提示。 - markhorrocks
这不会给我 cookie。 - markhorrocks
当cookie在头部内时,我的代码会显示uiwebview获取的内容。您是否可以使用像Postman这样的外部程序获取cookie? - kuzdu
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接