android webview自定义标头不会出现页面资源请求

时间:2016-03-30 17:09:28

标签: android webview request-headers

在我的Android应用程序中,我连接到一个安全站点,我的登录凭据包含在自定义标头中。我能够成功登录,因为自定义标头随新页面请求一起发送。 根据我的自定义标头信息,我的设备启用了特定的页面功能。问题是当我在登录后从主页加载资源时,我在webview.LoadUrl()中指定了自定义标头。不发送。因此,最终结果是我可以登录但不会收到与我的设备关联的特殊功能。

我已尝试过这两种覆盖。更改URL时,shouldOverrideUrlLoading似乎有效,但似乎没有在资源请求中调用shouldInterceptRequest?如果是我的实现不起作用?

        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
            request.getRequestHeaders().putAll(getExtraHeaders());
            return super.shouldInterceptRequest(view, request);
        }


        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url, getExtraHeaders());
                return false;

            }

1 个答案:

答案 0 :(得分:0)

看看这对你来说是否更好:

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        view.post(new Runnable() {
            @Override
            public void run() {
                view.loadUrl(url, getExtraHeaders());
            }
        });

        // true means: yes, we are overriding the loading of this url
        return true;
    }

这个附加代码只是一个建议/大纲,不应被视为剪切/粘贴就绪代码

    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {

        String mimetype;
        String encoding;

        Map<String, String> headers = new HashMap<>();
        headers.putAll(request.getRequestHeaders());
        headers.putAll(getExtraHeaders());

        URL url = request.getUrl().toString();
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        for (String key : headers.keySet()) {
            conn.setRequestProperty(k, headers.get(k));
            // TODO look for the mimetype and encoding header information and set mimetype and encoding
        }

        return new WebResourceResponse(mimetype, encoding, conn.getInputStream());
        // return null here if you decide to let the webview load the resource
    }