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?
Il semble que vous puissiez accéder à la réponse à partir de la méthode WKNavigationDelegate
webView: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);
}
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)
}
À 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;
}