web-dev-qa-db-ja.com

WKWebviewからHTTP応答ヘッダーを取得する

WKWebviewの要求から応答HTTPヘッダーを読み取る必要があります。サーバーから送信された特定のカスタムヘッダーに基づいてカスタマイズを実行する必要があります。この情報を応答データに追加することはできません。

ドキュメントや以前の質問のエントリは見つかりませんでした。それを行う方法はありますか?

10
badger_cl

WKNavigationDelegateメソッド webView:decidePolicyFor:decisionHandler: からの応答にアクセスできるようです。

オブジェクトをWKWebViewnavigationDelegateとして設定し、次のメソッドを追加します。

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

    decisionHandler(WKNavigationResponsePolicyAllow);
}

NobodyNadaの答えのSwift 3.1バージョン:

フォースキャストなし

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)
}
11
Andreas
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)
}
1
Dilip Mishra

デリゲートメソッドから、(WKNavigationResponse*)navigationResponseを取得できます。そして、navigationResponseオブジェクトから応答自体を取得できます。

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

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

}
1
Alex