当前位置: 首页 > 知识库问答 >
问题:

在Android的shouldInterceptRequest中的webview中获取响应头

钦永贞
2023-03-14

当我向服务器发布一些url时,我试图在webview中获取响应标题。我使用的是shouldInterceptRequest方法。

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

            if(request.getUrl().toString().contains(SMConstant.INTERCEPTED_URL)){
                if(interceptFlag==0){
                    ((Activity) mContext).runOnUiThread(new Runnable(){
                        @Override
                        public void run() {
                            view.postUrl(request.getUrl().toString(), EncodingUtils.getBytes(postData, "UTF-8"));
                        }
                    });
                    interceptFlag++;
                }

            }
            return super.shouldInterceptRequest(view, request);
        }

此方法返回WebResource响应对象。但我不知道如何从中获取响应标头。

默认情况下,返回super。shouldInterceptRequest(视图、请求) 返回null。

那么,应该做些什么才能捕捉到实际的webview响应呢。

共有1个答案

和光启
2023-03-14

尝试此代码(需要API VERSION 21):

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
            if (request.getUrl().toString().contains("some_char")) {// condition to intercept webview's request
                return handleIntercept(request);
            } else
                return super.shouldInterceptRequest(view, request);
        }
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private WebResourceResponse handleIntercept(WebResourceRequest request){
    OkHttpClient okHttpClient = new OkHttpClient();
    final Call call = okHttpClient.newCall(new Request.Builder()
            .url(request.getUrl().toString())
            .method(request.getMethod(),null)
            .headers(Headers.of(request.getRequestHeaders()))
            .build()
    );
    try {
        final Response response = call.execute();
        response.headers();// get response header here
        return new WebResourceResponse(
                response.header("content-type", "text/plain"), // You can set something other as default content-type
                response.header("content-encoding", "utf-8"),  //you can set another encoding as default
                response.body().byteStream()
        );
    } catch (IOException e) {
        e.printStackTrace();
        return null
    }
}

参考:在WebView中访问http响应头?

https://artemzin.com/blog/use-okhttp-to-load-resources-for-webview/

 类似资料:
  • 问题内容: 我有一个包含表单(帖子)的html。单击某些提交按钮时,我会收到JSON响应。 如何获取此JSON? 如果我不截取请求,则json将显示在Web视图上,所以我想应该使用(我正在使用API​​ 12),但是我不知道如何在其中获取json。 还是有更好的方法,例如拦截响应而不是请求? 谢谢 问题答案: 您应该重写的方法

  • 相关问题 < code>Json的响应是< code >新行分隔符Json: 我正在使用来提出请求: 我可以在我的中看到响应,但收到以下错误: 中格式错误的JSON < li >响应在< code>NdJson中,它无法正确解析它 如何正确解析它?

  • 问题内容: 我正在尝试寻找在Android中发出USSD请求的方法。我找到了-http://commandus.com/blog/?p=58。我将所有需要的文件添加到我的项目中。 USSDDumbExtendedNetworkService.java: 表现: BootReceiver.java: 因此,现在该服务在启动完成后启动。 我的问题是我如何发送USSD请求并获得服务响应?谢谢!) 问题答

  • 我的问题是我如何发送USSD请求并得到服务响应?(谢谢!)

  • 我已经为android Studio创建了一个webview应用程序。但没有加载web URL。错误为NET::ERR_ACCESS_DENIED。有谁能帮忙吗

  • 我使用了Web API控制器中的IActionResult和邮递员的加热方法,我的功能正在工作,但没有得到成功响应。我的代码是: Postman中的响应是:无法获得任何响应连接到https://localhost:44303/api/pousada/markasinactive时出错。可能发生这种情况的原因:服务器无法发送响应:确保后端正常工作自签名SSL证书被阻止:通过关闭设置>常规代理配置错误