获取UIWebView响应头

时间:2014-03-11 12:30:37

标签: ios objective-c uiwebview header

我已经研究过从UIWebview响应中获取响应头的方法。 This SO question讨论了它。但我不确定苹果是否允许这样做。我将有一个webview显示一个加载的登录页面,并需要在成功登录后获取响应标头。另外this

可以获取状态代码。但它会创建一个重复的NSUrlConnection请求。有什么办法可以实现这个目标吗?我很感激有关这方面的任何信息。

5 个答案:

答案 0 :(得分:14)

除了DBD提供的答案外,您还需要确保

  1. 包含的UIViewController在.h文件中标记为UIWebViewDelegate:

    @interface VIMAuthenticationViewController : UIViewController <UIWebViewDelegate>
    
  2. UIWebView的委托设置为包含UIViewController。这可以直接在Interface Building中完成,也可以通过链接Web视图并在视图中添加以下内容来加载.m fie:

    [self.WebView setDelegate:self];
    
  3. 添加DBD提供的代码:

    (void)webViewDidFinishLoad:(UIWebView *)webView {
       NSCachedURLResponse *resp = [[NSURLCache sharedURLCache] cachedResponseForRequest:webView.request];
       NSLog(@"%@",[(NSHTTPURLResponse*)resp.response allHeaderFields]);
    }
    

答案 1 :(得分:11)

这应该为你做。

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSCachedURLResponse *resp = [[NSURLCache sharedURLCache] cachedResponseForRequest:webView.request];
    NSLog(@"%@",[(NSHTTPURLResponse*)resp.response allHeaderFields]);
}

答案 2 :(得分:0)

雨燕4

func webViewDidFinishLoad(_ webView: UIWebView) {

    let headers = webView.request?.allHTTPHeaderFields
    for (key,value) in headers! {
        print("key \(key) value \(value)")
    }
}

答案 3 :(得分:0)

NSCachedURLResponse *resp = [[NSURLCache sharedURLCache] cachedResponseForRequest:webView.request];   
NSLog(@"%@",[(NSHTTPURLResponse*)resp.response allHeaderFields]);

此函数有时会返回nil, 我查了一下,如果文件大小超过50kb,NSURLConnection不会调用storeCachedResponse:forRequest;

答案 4 :(得分:-1)

快捷键4

override func viewDidLoad() {
    super.viewDidLoad()
    webView.delegate = self
}

func webViewDidFinishLoad(_ webView: UIWebView) {
    if let request = webView.request {
        let response = URLCache.shared.cachedResponse(for: request)
        // ...
    }
}