从 WKWebview 检索 HTTP 响应 headers

Retrieve HTTP response headers from WKWebview

我需要从 WKWebview 的请求中读取响应 HTTP headers。我需要根据服务器发送的某些自定义 headers 执行自定义。无法在响应数据中添加此信息。

我在文档中和之前的问题中都找不到任何条目。有什么办法吗?

您可以从委托方法中检索 (WKNavigationResponse*)navigationResponse。从 navigationResponse 对象中,您可以获得响应本身:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {

     NSHTTPURLResponse * response = (NSHTTPURLResponse *)navigationResponse.response;

}

您似乎可以访问来自 WKNavigationDelegate 方法的响应 webView:decidePolicyFor:decisionHandler:

将一些对象设置为 WKWebViewnavigationDelegate,并添加此方法:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
    NSDictionary *headers = ((NSHTTPURLResponse *)navigationResponse.response).allHeaderFields;

    decisionHandler(WKNavigationResponsePolicyAllow);
}

Swift 3.1、4、5版NobodyNada的回答:

没有强制施法

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
    if let response = navigationResponse.response as? HTTPURLResponse {
        let headers = response.allHeaderFields
        //do something with headers
    }
    decisionHandler(.allow)
}

强制施法:

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
    let headers = (navigationResponse.response as! HTTPURLResponse).allHeaderFields
    //do something with headers 
    decisionHandler(.allow)
}
Swift 4.2 Answers with response.
func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void)
 {
   let response = navigationResponse.response as? HTTPURLResponse
       decisionHandler(.allow)
}