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.
Tambahkan header khusus yang berasal dari tampilan web Android [duplikat]
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
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
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
Bagaimana saya bisa mendapatkan tipe konten dari permintaan? Sejauh yang saya tahu, kita hanya bisa mendapat tanggapan.
- person Gopichand; 27.08.2013
Lihat di sini. Menggunakan
httpResponse.getEntity()
untuk mendapatkan HttpEntity
.
- person admar.kevin; 27.08.2013
Terima kasih atas masukan Anda.
- person Gopichand; 30.08.2013
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
@ 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
@clu silakan merujuk ke Bagian Penghapusan Klien HTTP Apache di developer.android .com/about/versions/marshmallow/
- person admar.kevin; 19.03.2016