从WKWebview检索HTTP响应头

时间:2016-12-13 19:05:45

标签: ios objective-c wkwebview

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

我在文档中找不到任何条目,也没有在此处的先前问题中找到。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:13)

您似乎可以通过WKNavigationDelegate方法webView:decidePolicyFor:decisionHandler:访问回复。

将某个对象设置为WKWebView' s navigationDelegate,并添加此方法:

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

    decisionHandler(WKNavigationResponsePolicyAllow);
}

答案 1 :(得分:7)

Swift 3.1版本的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)
}

答案 2 :(得分:1)

从委托方法中,您可以检索"。从navigationResponse对象中,您可以获得响应:

(WKNavigationResponse*)navigationResponse

答案 3 :(得分:1)

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