Tambahkan header khusus yang berasal dari tampilan web Android [duplikat]

Saya perlu menambahkan tajuk khusus ke SETIAP permintaan yang datang dari WebView. Saya tahu loadURL memiliki parameter untuk menambahkan Header tambahan, tetapi itu hanya diterapkan pada beberapa permintaan saja. Semua permintaan (terkait sumber daya) tidak berisi header. Saya telah melihat semua penggantian di WebViewClient, tetapi tidak ada yang memungkinkan untuk menambahkan header ke permintaan sumber daya - onLoadResource(WebView view, String url) dan shouldInterceptRequest(Webview,url). Bantuan apa pun akan sangat luar biasa.


person Gopichand    schedule 23.08.2013    source sumber


Jawaban (1)


shouldInterceptRequest(Webview,url) dapat membantu Anda mencegat setiap permintaan situs, seperti JavaScript, CSS, Gambar. Kemudian di dalam shouldInterceptRequest(Webview,url) Anda dapat menggunakan parameter url untuk mengawali permintaan http baru dengan menggunakan HttpClient dan HttpPOST, berikut contoh kodenya :

DefaultHttpClient client = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(<"your url for each request">);
httpPost.setHeader("<header-name>", "<header-value>");
HttpReponse httpResponse = client.execute(httpPost);

//here omit getting content-type and encoding

InputStream reponseInputStream = httpReponse.getEntity().getContent();

Kemudian Anda dapat memasukkan responseInputStream hingga return WebResourceResponse(<content-type>, <encoding>, reponseInputStream) ke dalam shouldInterceptRequest(Webview,url) Anda

jika Anda memiliki permintaan yang tidak perlu menambahkan header lagi, cukup filter dan return null, shouldInterceptRequest(Webview,url) akan melakukan sisanya.

Semoga ini bisa membantu.

person admar.kevin    schedule 23.08.2013
comment
Kami sedang mengembangkan browser yang mengirimkan permintaan ke proxy dan proxy mengirimkan data kembali ke browser. Jadi, setiap permintaan harus masuk ke proxy dengan header khusus dan menampilkan halaman dari proxy. Dalam hal ini, bagaimana kita bisa mencegat hanya permintaan terkait sumber daya. Jenis sumber daya Banyak sekali, seperti CSS,JS,PNG,JPEG,dll... Jadi, bagaimana cara mengatasinya. - person Gopichand; 26.08.2013
comment
hanya permintaan terkait sumber daya, saya kira Anda tidak ingin menambahkan header ke halaman web itu sendiri, Anda cukup memfilternya di ShouldInterceptRequest() menggunakan tipe konten permintaan selain teks/html. - person admar.kevin; 26.08.2013
comment
Bagaimana saya bisa mendapatkan tipe konten dari permintaan? Sejauh yang saya tahu, kita hanya bisa mendapat tanggapan. - person Gopichand; 27.08.2013
comment
Lihat di sini. Menggunakan httpResponse.getEntity() untuk mendapatkan HttpEntity. - person admar.kevin; 27.08.2013
comment
Terima kasih atas masukan Anda. - person Gopichand; 30.08.2013
comment
mustInterceptRequest() tidak dipanggil untuk url sumber daya berulang sehingga tidak dapat menambahkan header khusus saya. misalnya untuk pertama kalinya saat url1 dipanggil mustInterceptRequest() dipanggil tetapi untuk kedua kalinya saat url1 dipanggil mustInterceptRequest() tidak dipanggil. - person saurav; 02.09.2014
comment
@ admar.kevin Apa itu HttpResponse? Dari perpustakaan mana Anda mendapatkan ini. Ini tidak tersedia untuk saya dengan SDK Android default. - person LyteSpeed; 18.03.2016
comment
@clu silakan merujuk ke Bagian Penghapusan Klien HTTP Apache di developer.android .com/about/versions/marshmallow/ - person admar.kevin; 19.03.2016