【问题标题】:How to get the body of the WebResourceRequest in android webView如何在android webView中获取WebResourceRequest的主体
【发布时间】:2018-03-10 21:35:22
【问题描述】:

我需要修改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);
}

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

【问题讨论】:

  • 您可以将正文存储在实例变量中并在进一步的请求中传递很长的内容吗?
  • 有什么解决办法吗?

标签: android webview


【解决方案1】:

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

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
   }
});

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2012-03-17
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多