Java 如何将带有“重定向”代码的WebResourceResponse传递到WebViewClient.shouldInterceptRequest中的Android WebView?

Java 如何将带有“重定向”代码的WebResourceResponse传递到WebViewClient.shouldInterceptRequest中的Android WebView?,java,android,http,webview,Java,Android,Http,Webview,为了访问响应头以获取特定的头值,我们必须在WebView中访问HTTP请求,自行执行HTTP资源下载,并将结果作为WebResourceResponse实例返回: public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { return new WebResourceResponse("text/plain", "UTF-8", 302, ...); // 30

为了访问响应头以获取特定的头值,我们必须在WebView中访问HTTP请求,自行执行HTTP资源下载,并将结果作为WebResourceResponse实例返回:

public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)
{
    return new WebResourceResponse("text/plain", "UTF-8", 302, ...); // 302 is invalid (not supported) value
}
然而,300-399中的代码是:

有没有合适的方法让WebView接受重定向响应


另外,我可以用Java反射来解决这个问题,并将值直接注入字段,而不是通过ctor进行验证,但它看起来非常脆弱,尽管它实际上可以工作。

我遇到了同样的问题

解决方案1:加载新url

public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
   String statusCode = 302; //get it from your response;
   if (statusCode >= 300 && statusCode <= 399) {
       final String newUrl = "https://example.com";
       final myWebview = view;
       view.post(new Runnable() {
           @Override public void run() {
               myWebview.loadUrl(newUrl);
           }
       });
       WebResourceResponse nullRes = new WebResourceResponse("text/html", "utf-8", new ByteArrayInputStream("".getBytes()));
       return nullRes;
   }
}
解决方案2:返回html模板

public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
    String statusCode = 302; //get it from your response;
    if (statusCode >= 300 && statusCode <= 399) {
        String newUrl = "https://example.com";
        String content = "<script>location.href = '" + newUrl + "'</script>";
        WebResourceResponse redirectRes = new WebResourceResponse("text/html", "utf-8", new ByteArrayInputStream(content.getBytes()));
        return redirectRes;
    }
}
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
    String statusCode = 302; //get it from your response;
    if (statusCode >= 300 && statusCode <= 399) {
        String newUrl = "https://example.com";
        String content = "<script>location.href = '" + newUrl + "'</script>";
        WebResourceResponse redirectRes = new WebResourceResponse("text/html", "utf-8", new ByteArrayInputStream(content.getBytes()));
        return redirectRes;
    }
}