ฉันต้องเพิ่มส่วนหัวที่กำหนดเองให้กับทุกคำขอที่มาจาก WebView
ฉันรู้ว่า loadURL
มีพารามิเตอร์สำหรับการเพิ่มส่วนหัวเพิ่มเติม แต่จะใช้กับคำขอบางรายการเท่านั้น คำขอทั้งหมด (เกี่ยวข้องกับทรัพยากร) ไม่มีส่วนหัว ฉันได้ดูการแทนที่ทั้งหมดใน WebViewClient
แล้ว แต่ไม่อนุญาตให้เพิ่มส่วนหัวในคำขอทรัพยากร - onLoadResource(WebView view, String url)
และ shouldInterceptRequest(Webview,url)
ความช่วยเหลือใด ๆ จะยอดเยี่ยม
เพิ่มส่วนหัวที่กำหนดเองที่มาจาก android webview [ซ้ำกัน]
คำตอบ (1)
shouldInterceptRequest(Webview,url)
สามารถช่วยคุณสกัดกั้นทุกคำขอของไซต์ เช่น JavaScript, CSS, รูปภาพ จากนั้นภายใน shouldInterceptRequest(Webview,url)
คุณสามารถใช้พารามิเตอร์ url
เพื่อเริ่มต้นคำขอ http ใหม่โดยใช้ HttpClient
และ HttpPOST
นี่คือโค้ดตัวอย่าง:
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();
จากนั้นคุณสามารถใส่ responseInputStream
ถึง return WebResourceResponse(<content-type>, <encoding>, reponseInputStream)
ใน shouldInterceptRequest(Webview,url)
ของคุณ
หากคุณมีคำขอใด ๆ ที่ไม่จำเป็นต้องเพิ่มส่วนหัวเพิ่มเติม เพียงกรองคำขอนั้นแล้ว return null
, shouldInterceptRequest(Webview,url)
จะดำเนินการส่วนที่เหลือ
หวังว่านี่จะช่วยได้
person
admar.kevin
schedule
23.08.2013
เรากำลังพัฒนาเบราว์เซอร์ที่ส่งคำขอไปยังพร็อกซี และพร็อกซีส่งข้อมูลกลับไปยังเบราว์เซอร์ ดังนั้น ทุกคำขอควรไปที่พร็อกซีพร้อมส่วนหัวที่กำหนดเองและแสดงหน้าจากพร็อกซี ในเรื่องนี้ เราจะสกัดกั้นเฉพาะคำขอที่เกี่ยวข้องกับทรัพยากรได้อย่างไร ประเภททรัพยากร มีมากมาย เช่น CSS,JS,PNG,JPEG ฯลฯ... แล้วฉันจะจัดการเรื่องนี้ได้อย่างไร
- person Gopichand; 26.08.2013
เฉพาะคำขอที่เกี่ยวข้องกับทรัพยากร ฉันคิดว่าคุณไม่ต้องการเพิ่มส่วนหัวให้กับหน้าเว็บ คุณสามารถกรองได้ใน
ShouldInterceptRequest()
โดยใช้ประเภทเนื้อหาของคำขออื่นที่ไม่ใช่ข้อความ/html
- person admar.kevin; 26.08.2013
ฉันจะรับประเภทเนื้อหาจากคำขอได้อย่างไร เท่าที่ทราบเราจะได้จากการตอบกลับเท่านั้น
- person Gopichand; 27.08.2013
ขอบคุณสำหรับข้อมูลของคุณ
- person Gopichand; 30.08.2013
shouldInterceptRequest() ไม่ได้ถูกเรียกสำหรับ URL ทรัพยากรที่ซ้ำกัน ดังนั้นจึงไม่สามารถเพิ่มส่วนหัวที่กำหนดเองของฉันได้ สำหรับเช่น เป็นครั้งแรกเมื่อ url1 ถูกเรียกว่า shouldInterceptRequest() แต่เป็นครั้งที่สองเมื่อ url1 ถูกเรียกว่า shouldInterceptRequest() จะไม่ถูกเรียก
- person saurav; 02.09.2014
@ admar.kevin HttpResponse คืออะไร คุณได้สิ่งนี้มาจากห้องสมุดแห่งใด ไม่สามารถใช้งานได้กับ Android SDK เริ่มต้น
- person LyteSpeed; 18.03.2016
@clu โปรดดูส่วนการกำจัดไคลเอ็นต์ Apache HTTP ใน developer.android .com/about/versions/marshmallow/
- person admar.kevin; 19.03.2016