เพิ่มส่วนหัวที่กำหนดเองที่มาจาก android webview [ซ้ำกัน]

ฉันต้องเพิ่มส่วนหัวที่กำหนดเองให้กับทุกคำขอที่มาจาก WebView ฉันรู้ว่า loadURL มีพารามิเตอร์สำหรับการเพิ่มส่วนหัวเพิ่มเติม แต่จะใช้กับคำขอบางรายการเท่านั้น คำขอทั้งหมด (เกี่ยวข้องกับทรัพยากร) ไม่มีส่วนหัว ฉันได้ดูการแทนที่ทั้งหมดใน WebViewClient แล้ว แต่ไม่อนุญาตให้เพิ่มส่วนหัวในคำขอทรัพยากร - onLoadResource(WebView view, String url) และ shouldInterceptRequest(Webview,url) ความช่วยเหลือใด ๆ จะยอดเยี่ยม


person Gopichand    schedule 23.08.2013    source แหล่งที่มา


คำตอบ (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
comment
เรากำลังพัฒนาเบราว์เซอร์ที่ส่งคำขอไปยังพร็อกซี และพร็อกซีส่งข้อมูลกลับไปยังเบราว์เซอร์ ดังนั้น ทุกคำขอควรไปที่พร็อกซีพร้อมส่วนหัวที่กำหนดเองและแสดงหน้าจากพร็อกซี ในเรื่องนี้ เราจะสกัดกั้นเฉพาะคำขอที่เกี่ยวข้องกับทรัพยากรได้อย่างไร ประเภททรัพยากร มีมากมาย เช่น CSS,JS,PNG,JPEG ฯลฯ... แล้วฉันจะจัดการเรื่องนี้ได้อย่างไร - person Gopichand; 26.08.2013
comment
เฉพาะคำขอที่เกี่ยวข้องกับทรัพยากร ฉันคิดว่าคุณไม่ต้องการเพิ่มส่วนหัวให้กับหน้าเว็บ คุณสามารถกรองได้ใน ShouldInterceptRequest() โดยใช้ประเภทเนื้อหาของคำขออื่นที่ไม่ใช่ข้อความ/html - person admar.kevin; 26.08.2013
comment
ฉันจะรับประเภทเนื้อหาจากคำขอได้อย่างไร เท่าที่ทราบเราจะได้จากการตอบกลับเท่านั้น - person Gopichand; 27.08.2013
comment
ดูที่นี่ ใช้ httpResponse.getEntity() เพื่อรับ HttpEntity - person admar.kevin; 27.08.2013
comment
ขอบคุณสำหรับข้อมูลของคุณ - person Gopichand; 30.08.2013
comment
shouldInterceptRequest() ไม่ได้ถูกเรียกสำหรับ URL ทรัพยากรที่ซ้ำกัน ดังนั้นจึงไม่สามารถเพิ่มส่วนหัวที่กำหนดเองของฉันได้ สำหรับเช่น เป็นครั้งแรกเมื่อ url1 ถูกเรียกว่า shouldInterceptRequest() แต่เป็นครั้งที่สองเมื่อ url1 ถูกเรียกว่า shouldInterceptRequest() จะไม่ถูกเรียก - person saurav; 02.09.2014
comment
@ admar.kevin HttpResponse คืออะไร คุณได้สิ่งนี้มาจากห้องสมุดแห่งใด ไม่สามารถใช้งานได้กับ Android SDK เริ่มต้น - person LyteSpeed; 18.03.2016
comment
@clu โปรดดูส่วนการกำจัดไคลเอ็นต์ Apache HTTP ใน developer.android .com/about/versions/marshmallow/ - person admar.kevin; 19.03.2016