2016-12-13 3 views
4

Мне нужно прочитать HTTP-заголовки ответа из запроса WKWebview. Мне нужно выполнить настройки на основе определенных пользовательских заголовков, отправленных сервером. Невозможно добавить эту информацию в данные ответа.Извлечь заголовки HTTP-ответа из WKWebview

Я не нашел никакой информации в документации или в предыдущих вопросах здесь. Есть ли способ сделать это?

ответ

10

Похоже, что вы можете получить доступ ответа от 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

Из метода делегата вы можете получить (WKNavigationResponse*)navigationResponse. И от объекта navigationResponse вы можете получить сам ответ:

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

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

} 
1

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) 
} 
Смежные вопросы