WebView post请求自定义添加自定义header

最近公司有需求:webview需要以post形式获取页面,并且要自定义header。
跟查了一下api,发现webview有
loadData(String url,Map header)
,但是post形式只有 postUrl(String url,byte[] body) 。
查询方案后,明确方案大致有2种:
1重写webViewClient的
shouldOverrideUrlLoading(WebView view, WebResourceRequest request)方法,拦截指定url,重新发起请求。
2 自己使用网络请求方法,将请求结果给webivew加载。
第一种我自己未测试通过,这里贴上第二种方法代码。
自己测试可用

protected void postURL(final String url, String postData) {
        X509TrustManager xtm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) {
            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                X509Certificate[] x509Certificates = new X509Certificate[0];
                return x509Certificates;
            }
        };

        SSLContext sslContext = null;
        try {
            sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, new TrustManager[]{xtm}, new SecureRandom());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
            @Override
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        };
        Request request = new Request.Builder()
                .url(url)
                .addHeader("Cache-Control", "max-age=0")
                .addHeader("Origin", "null") //Optional
                .addHeader("Upgrade-Insecure-Requests", "1")
                .addHeader("Content-Type", "application/x-www-form-urlencoded")
                .addHeader("User-Agent", webview.getSettings().getUserAgentString())
                .addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
                .addHeader("Accept-Language", Locale.getDefault().getLanguage())
                .post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), postData))
                .build();


        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .sslSocketFactory(sslContext.getSocketFactory())
                .hostnameVerifier(DO_NOT_VERIFY)
                .build();
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: ");
//                Timber.e(e.getMessage());
            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                final String htmlString = response.body().string();

                webview.post(new Runnable() {
                    @Override
                    public void run() {
                        webview.clearCache(true);
                        webview.loadDataWithBaseURL(url, htmlString, "text/html", "utf-8", null);
                    }
                });
            }
        });
    }

你可能感兴趣的:(WebView post请求自定义添加自定义header)