web-dev-qa-db-fra.com

Récupérer les en-têtes de réponse HTTP de WKWebview

J'ai besoin de lire les en-têtes HTTP de réponse à partir d'une demande de WKWebview. Je dois effectuer des personnalisations en fonction de certains en-têtes personnalisés envoyés par le serveur. Il n'est pas possible d'ajouter cette information dans les données de réponse.

Je n'ai trouvé aucune entrée dans la documentation ni dans les questions précédentes ici. Y'a-t'il un quelconque moyen d'y arriver?

8
badger_cl

Il semble que vous puissiez accéder à la réponse à partir de la méthode WKNavigationDelegatewebView:decidePolicyFor:decisionHandler: .

Définissez un objet comme WKWebView 's navigationDelegate et ajoutez cette méthode:

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

    decisionHandler(WKNavigationResponsePolicyAllow);
}
12
NobodyNada

Version Swift 3.1 de la réponse de NobodyNada:

Sans force

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

Avec la force exprimée:

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

À partir de la méthode déléguée, vous pouvez récupérer le (WKNavigationResponse*)navigationResponse. Et à partir de l'objet navigationResponse, vous pouvez obtenir la réponse elle-même:

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

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

}
1
Alex