【问题标题】:Retrieve HTTP response headers from WKWebview从 WKWebview 检索 HTTP 响应标头
【发布时间】:2016-12-13 19:05:44
【问题描述】:

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

我在文档和以前的问题中都找不到任何条目。有什么办法吗?

【问题讨论】:

    标签: ios objective-c wkwebview


    【解决方案1】:

    您似乎可以从WKNavigationDelegate 方法webView:decidePolicyFor:decisionHandler: 访问响应。

    设置一些对象为WKWebView的navigationDelegate,并添加这个方法:

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

    【讨论】:

      【解决方案2】:

      NobodyNada 回答的 Swift 3.1、4 和 5 版本:

      没有强制施法

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

      【讨论】:

        【解决方案3】:
        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)
        }
        

        【讨论】:

          【解决方案4】:

          您可以从委托方法中检索(WKNavigationResponse*)navigationResponse。您可以从 navigationResponse 对象中获取响应本身:

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

          【讨论】:

            猜你喜欢
            • 2020-03-24
            • 1970-01-01
            • 2020-01-14
            • 1970-01-01
            • 1970-01-01
            • 2021-08-09
            • 2017-11-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多