美文网首页
android webview拦截post的请求

android webview拦截post的请求

作者: jxtx | 来源:发表于2019-01-08 19:00 被阅读91次

1.拦截post的请求在其中添加请求头。
在WebViewClient()中使用shouldInterceptRequest方法进行拦截;注意在api21以下使用
public WebResourceResponse shouldInterceptRequest(WebView view, String url){};api21以上public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request){}。目前比较方便的在public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)中进行拦截,因为request中提供了判断了请求方式的方法以及获取请求头的方法。虽然可以添加请求但是无法获取请求体部分(官方没有提供获取请求体的方法),抓包时发现没有请求体。
在api21以下只提供地址无法判断是post还是get请求。有谁有好的方法麻烦告知以下。

 @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Nullable
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {


                if (request.getMethod().equalsIgnoreCase("post")){


                    URL url= null;
                    try {
                        LogUtil.i("11111111111=====request.getUrl().toString()==="+request.getUrl().toString());
                        url = new URL(request.getUrl().toString());
                        HttpURLConnection connection= (HttpURLConnection) url.openConnection();
                        connection.setDoInput(true);
                        connection.setDoOutput(true);
                        connection.setUseCaches(false);
                        connection.setRequestMethod("POST");
                        Map<String, String> requestHeaders = request.getRequestHeaders();
                        for (Map.Entry<String, String> entry : requestHeaders.entrySet()) {
                            connection.setRequestProperty(entry.getKey(), entry.getValue());
                        }
                        String version = APKUtil.getVerName(TaskCenterActivity.this);
                        int systemVersion = APKUtil.getSystemVersion();
                        connection.setRequestProperty("Authorization", MyApplication.getAppUser().getAccess_token());
                        connection.setRequestProperty("Bp-Channel","Android/" + version + "/" + systemVersion);
//                        String params = "\nBp-Channel:" + "Android/" + version + "/" + systemVersion + "\nAuthorization:" + MyApplication.getAppUser().getAccess_token();
//                        DataOutputStream os=new DataOutputStream(connection.getOutputStream());
//                        os.writeBytes(params);
                        return new WebResourceResponse("text/html", connection.getContentEncoding(), connection.getInputStream());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }


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

相关文章

网友评论

      本文标题:android webview拦截post的请求

      本文链接:https://www.haomeiwen.com/subject/rhbbrqtx.html