我已经研究过从UIWebview响应中获取响应头的方法。 This SO question讨论了它。但我不确定苹果是否允许这样做。我将有一个webview显示一个加载的登录页面,并需要在成功登录后获取响应标头。另外this
可以获取状态代码。但它会创建一个重复的NSUrlConnection请求。有什么办法可以实现这个目标吗?我很感激有关这方面的任何信息。
答案 0 :(得分:14)
除了DBD提供的答案外,您还需要确保
包含的UIViewController在.h文件中标记为UIWebViewDelegate:
@interface VIMAuthenticationViewController : UIViewController <UIWebViewDelegate>
UIWebView的委托设置为包含UIViewController。这可以直接在Interface Building中完成,也可以通过链接Web视图并在视图中添加以下内容来加载.m fie:
[self.WebView setDelegate:self];
添加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)
// ...
}
}