Webview覆盖默认标头,如accept-language,accept-encoding,accept-charset等

时间:2013-12-19 02:01:48

标签: android webview header override

好。标题是自我解释的。我想从任何WebView请求(POST或GET)覆盖每个标头。 Android API提供的方法不会覆盖这些标头。虽然我设置了它们,但默认标题占优势。

例如:

Map<String, String> headers = new HashMap<String, String>();
headers.put("Referer", "www.hello.com");
headers.put("User-Agent", "Any User Agent");
headers.put("Accept-Language", "es");
webView.loadUrl("www.hello.com/world.html", headers);

这不起作用。在模拟器中运行它(好吧,不完全是那个!这是一个例子)并使用Wireshark查看流量后,我可以确认只发送了默认标头。我的自定义标头被丢弃。

当它以这种方式设置时,唯一的自定义标题是User-Agent:

webView.getSettings().setUserAgentString("Any User Agent");

使用loadUrl(url,extraheaders)方法它不起作用。

因此。我正在寻找一种改变我的webview标题的方法。应该是一种方式。根据“internetz”,shouldOverrideUrlLoading和shouldinterceptrequest不会捕获POSTS。我需要抓住POSTS和GET。我想更改来自我的webview的每个请求的标题。应该很简单!但我找不到简单的解决方案。

有什么想法吗?

感谢。

编辑1:

我甚至尝试在我的应用程序中更改语言环境。它有点工作。至少我欺骗了WebView以使用我自己的Accept-Language。但出于某种原因,Android背后的人认为在Accept-Language标题中使用“en-US”是必须的。不管你说什么语言。

我将我的语言环境改为es-AR并且有效。但是WebView也加入了en-US。所以现在我的接受语言是“es-AR,en-US”,这对我来说是不可接受的(请不要问我为什么请。)

这是webview部分的源代码,它获取区域设置并生成accept-langauge标头。请注意部分,如果您的语言环境未设置为US,则强制接受语言为en-US作为“第二语言”。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/webkit/WebSettings.java#WebSettings.getCurrentAcceptLanguage%28%29

0 个答案:

没有答案