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

问题描述 投票:0回答:2

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

我已经尝试过这两种覆盖。 shouldOverrideUrlLoading 似乎在更改 URL 时有效,但 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;

            }
android webview request-headers
2个回答
1
投票

看看这对你是否更有效:

@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 null here if you decide to let the webview load the resource
    return new WebResourceResponse(mimetype, encoding, conn.getInputStream());
}

0
投票

也许尝试不同的方法,使用 WebKit 的 CookieManager 将您需要的任何内容存储在主机的 cookie 中,并使用请求的 cookie 标头而不是自定义标头

© www.soinside.com 2019 - 2024. All rights reserved.