android webview header

android - ¿Cómo puedo agregar un encabezado personalizado para publicar la solicitud en la vista web?



webview header (2)

Ahora tengo un problema con la publicación de la solicitud en la vista web. Aquí está la situación: cuando mi vista web cargó una página de inicio de sesión, y hay un formulario dentro del cual se realizaría la solicitud posterior. ¿Cómo puedo agregar un encabezado personalizado al hacer clic en el botón Enviar?


Me encontré con la necesidad de implementar una función así mismo, así que estoy publicando un fragmento de código para cualquier persona que tenga el mismo problema en el futuro. Definitivamente recomendaría usar OkHttp, pero el principio (realizar una solicitud y cargar el html en el navegador en la devolución de llamada exitosa) debería ser el mismo con cualquier otro cliente de red.

protected void postURL(final String url, String postData) { Request request = new Request.Builder() .url(url) .addHeader("Cache-Control", "max-age=0") .addHeader("Origin", "null") //Optional .addHeader("Upgrade-Insecure-Requests", "1") .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()) .addHeader("Cookie", CookieManager.getInstance().getCookie(url)) .addHeader("X-Requested-With", BuildConfig.APPLICATION_ID) .post(RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), postData)) .build(); new OkHttpClient().newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { 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); } }); } }); }

Tenga en cuenta que la mayoría de esos encabezados no son necesarios, pero se pueden usar como guía para reconstruir una solicitud original emitida por la propia página web.


Puede agregar loadUrl(Strring url, Map<String, String> extraHeaders) pero esto solo funciona en API18 +

Otra forma es

webview.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return super.shouldOverrideUrlLoading(view, url); } @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { // you can add custom header here return super.shouldInterceptRequest(view, url); } });