2013-08-23 52 views
4

我需要为来自WebView的每个请求添加自定义标头。我知道loadURL具有用于添加额外标题的参数,但这些参数仅适用于部分请求。 所有(与资源有关的)请求都不包含标题。 我看过WebViewClient中的所有覆盖项,但是没有任何内容允许向资源请求添加标头 - onLoadResource(WebView view, String url)shouldInterceptRequest(Webview,url)。任何帮助将是美好的。添加来自android webview的自定义标头

+0

[向WebView资源请求添加自定义标头的可能的重复项](http://stackoverflow.com/questions/7610790/add-custom-headers-to-webview-resource-requests-android) – d60402

回答

8

shouldInterceptRequest(Webview,url)可以帮助您拦截每个站点的请求,例如JavaScript,CSS,Image。然后里面shouldInterceptRequest(Webview,url)您可以使用参数url使用HttpClientHttpPOST初始新的HTTP请求,这里是示例代码:

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(); 

然后你就可以把responseInputStreamreturn WebResourceResponse(<content-type>, <encoding>, reponseInputStream)shouldInterceptRequest(Webview,url)

,如果您有任何请求不需要添加更多标题,只需对其进行过滤即可,return nullshouldInterceptRequest(Webview,url)将完成其余操作。

希望这可以帮助。

+0

我们正在开发一个发送请求到代理服务器和代理服务器的浏览器将数据发送回浏览器。因此,每个请求都应该使用自定义标头进行代理并显示来自代理服务器的页面。在这种情况下,我们如何才能拦截与资源相关的请求。资源类型非常多,像CSS,JS,PNG,JPEG等...那么,我该如何处理这个问题。 – Gopichand

+0

只有资源相关的请求,我想你不想为网页本身添加标题,你可以使用请求的内容类型而不是“text/html”在'ShouldInterceptRequest()'中过滤它。 –

+0

如何从请求获取内容类型?据我所知,我们只能从回应中得到答案。 – Gopichand