setUserAgentString в Android webview не влияет на заголовок HTTP, используемый в loadURL()
Пытался изменить строку User-Agent в HTTP-запросе приложения для Android. Я проверил это вместе с wireshark и эмулятором и увидел, что, хотя я установил строку useragent в webview, связанный запрос loadUrl не использует эту строку агента пользователя. Вместо этого я вижу строку Dalvik useragent в захвате wireshark.
Вот абстрактный код. Есть идеи? Или эмулятор не поддерживает это?
@Override
public void run() {
assert(context != null);
...
...
webView = new WebView(context);
...
String defaultUserAgent = "betaUAteststring";
// Clear per-application caches etc
webView.clearCache(true);
webView.clearHistory();
webView.getSettings().setAppCacheEnabled(false);
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
....
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
..
}
@Override
public void onLoadResource(WebView view, String url) {
...
}
});
// Start loading
webView.getSettings().setUserAgentString(defaultUserAgent);
String setUA = webView.getSettings().getUserAgentString();
//--> logging here shows the correct user agent, so the webview does accept the value
// However the following statement does not result in an http request with the webviews user agent
webView.loadUrl(url);
//Alternative doesn't help either (and shouldn't according to javadoc)
//Map<String,String> headerMap = new HashMap<String,String>();
//headerMap.put("User-Agent","uaTestInAMap");
//webView.loadUrl(url, headerMap);
}
2 ответов:
Отвечая на мой собственный вопрос. Похоже, что эмулятор по какой-то причине не принимает строку агента пользователя из webview. Однако я не выяснил причину этого. Код прекрасно работает на реальном устройстве.
Вы пропускаете, чтобы переопределить поведение Android по умолчанию на открытом url (запустить браузер по умолчанию). Использовать ваши настройки браузера, чтобы navitage, вам нужно только прикрепить WebViewClient на объект WebView
То есть добейтесь добавления следующей строки в ваш код:
webView.setWebViewClient(new WebViewClient());Ура!, Родриго
Comments