如何在android webView中获取WebResourceRequest的主体

郑凯拓*_*郑凯拓 17 android webview

我需要修改android webView请求的请求头.所以,我在方法shouldInterceptRequest中添加以下代码.这是我的代码.

        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
            try {
                    String mUrl = request.getUrl().toString();
                    OkHttpClient httpClient = new OkHttpClient();
                    Request mRequest = new Request.Builder()
                            .url(request.getUrl().toString())
                            .addHeader("token", UserHelper.getToken()) //add headers
                            .build();
                    Response response = httpClient.newCall(mRequest).execute();

                    return new WebResourceResponse(
                            getMimeType(request.getUrl().toString()), // set content-type
                            response.header("content-encoding", "utf-8"),
                            response.body().byteStream()
                    );
            } catch (Exception e) {
                return super.shouldInterceptRequest(view, request);
            }
            return super.shouldInterceptRequest(view, request);
        }
Run Code Online (Sandbox Code Playgroud)

实际上,它的工作原理,所有请求都带有新的标题.但是,因为我构造了新请求,原始请求方法/正文丢失了.我不知道如何从WebResourceRequest保留原始方法和正文.

do0*_*o01 2

WebResourceRequest 是一个无法读取请求正文的接口,但您可以使用自己的接口,例如此存储库剂量。

https://github.com/KonstantinSchubert/request_data_webviewclient

webView.setWebViewClient(new WriteHandlingWebViewClient() {
   @Override
   public boolean shouldOverrideUrlLoading(WebView view, WriteHandlingWebResourceRequest request) {
        // works the same as WebViewClient.shouldOverrideUrlLoading, 
        // but you have request.getAjaxData() which gives you the 
        // request body
   }
});
Run Code Online (Sandbox Code Playgroud)