当前位置:  开发笔记 > 编程语言 > 正文

访问WebView中的http响应头?

如何解决《访问WebView中的http响应头?》经验,为你挑选了1个好方法。

有一种方法可以在WebView中加载网页后查看活动中的http响应标头吗?似乎这应该是可能的,但我找不到任何暴露标题的方法.



1> Cristian..:

既不提供WebView也不WebViewClient提供方法,但是,您可以尝试手动实现.你可以这样做:

private WebView webview;
public void onCreate(Bundle icicle){
    // bla bla bla

    // here you initialize your webview
    webview = new WebView(this);
    webview.setWebViewClient(new YourWebClient());
}

// this will be the webclient that will manage the webview
private class YourWebClient extends WebViewClient{

    // you want to catch when an URL is going to be loaded
    public boolean  shouldOverrideUrlLoading  (WebView  view, String  urlConection){
        // here you will use the url to access the headers.
        // in this case, the Content-Length one
        URL url;
        URLConnection conexion;
        try {
            url = new URL(urlConection);
            conexion = url.openConnection();
            conexion.setConnectTimeout(3000);
            conexion.connect();
            // get the size of the file which is in the header of the request
            int size = conexion.getContentLength();
        }


        // and here, if you want, you can load the page normally
        String htmlContent = "";
        HttpGet httpGet = new HttpGet(urlConection);
        // this receives the response
        HttpResponse response;
        try {
            response = httpClient.execute(httpGet);
            if (response.getStatusLine().getStatusCode() == 200) {
                // la conexion fue establecida, obtener el contenido
                HttpEntity entity = response.getEntity();
                if (entity != null) {
                    InputStream inputStream = entity.getContent();
                    htmlContent = convertToString(inputStream);
                }
            }
         } catch (Exception e) {}

         webview.loadData(htmlContent, "text/html", "utf-8");
         return true;
    }

    public String convertToString(InputStream inputStream){
        StringBuffer string = new StringBuffer();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                string.append(linea + "\n");
            }
        } catch (IOException e) {}
        return string.toString();
    }
}

我现在无法测试它,但这基本上就是你可以做的(尽管它非常疯狂:).


自问这个问题以来已有4年了.我想知道是否有任何完全准备好的解决方案?或者这仍然是最好的方式?如果是这样,httpClient来自哪里?
用这种方法唯一的问题是在调用的WebView使用loadURL时shouldOverrideUrlLoading()不叫().这对我来说是个大问题.
我认为这不会很好用,因为似乎只有forOverrideUrlLoading为GET请求调用.如果您想拦截POST请求中的标头怎么办?shouldInterceptRequest是更合适的方法,但它需要棒棒糖.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有