我在 myActivity 中使用 WebView 创建 Android 应用程序。
public void onCreate( Bundle savedInstanceState) { super.onCreate( savedInstanceState);
// before setContentView CookieSyncManager.createInstance( this); CookieSyncManager.getInstance().startSync(); CookieManager.getInstance().removeAllCookie(); CookieManager.getInstance().setAcceptCookie( true); setContentView( R.layout.browser); webviewHTML = (WebView) findViewById( R.id.webviewHTML); WebSettings webSettings = webviewHTML.getSettings(); webSettings.setSupportZoom( true); webSettings.setBuiltInZoomControls( true); webSettings.setJavaScriptEnabled( true); webSettings.setJavaScriptCanOpenWindowsAutomatically( true); webSettings.setAppCacheEnabled( false); webSettings.setSaveFormData( false); webSettings.setSavePassword( false); webSettings.setDefaultTextEncodingName( "utf-8"); webSettings.setDomStorageEnabled( true); webSettings.setUserAgent( 0); webviewHTML.setWebViewClient( new myWebViewClient()); webviewHTML.addJavascriptInterface( new myJavaScriptInterface(), getString( R.string.sAppName)); webviewHTML.setOnLongClickListener( onWebViewLongClickListener); webviewHTML.loadUrl( "myaddress"); }
创建 WebView 时,我打开公司 Microsoft Exchange 2010 OWA 的页面'https://mail.mydomain.com/owa/ ':
然后我手动输入我的域中的用户名和密码。 但我在 WebView 中收到错误消息页面(响应代码 200):
<head><head></head><body>Bad Request</body></head>
屏幕截图:
但是当我在任何浏览器(Chrome)中打开此页面时,我会正确输入 OWA 邮件页面:
为什么 Exchange 服务器返回 html 页面,正文中有错误?
我需要向 WebView 属性添加什么?
添加: 另外,当我在 PC 窗口上的桌面浏览器中打开此页面时,浏览器(而非网站)内会弹出用户名和密码:
添加解决方案 我发现我的错误。我检查 WebView.myWebViewClient.onPageFinish 中的 URL,发现 URL 与我的起始 URL 不同。我更正了此 URL,我的页面将正确打开。
最佳答案
更改:
webSettings.setUserAgent( 0);
对于
webSettings.setUserAgentString("User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko");
说明:您有意将自己( WebView )设置为不存在的浏览器,而 Exchange 可能不喜欢这样。通过此更改,您将把自己标识为 Firefox。
附加答案
此外,为了摆脱该身份验证请求,您应该使用将您自己的类添加到 webview 中来扩展 WebViewClient
并实现onReceivedHttpAuthRequest()
.
例如:
webviewHTML = (WebView) findViewById( R.id.webviewHTML);
(...)
MPascualViewClient myNewClient = new MPascualViewClient();
webviewHTML.setWebViewClient(myNewClient);
(...)
webviewHTML.loadUrl( "myaddress");
}
private class MPascualViewClient extends WebViewClient {
@Override
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
Log.d(this.getClass().getName(), "onReceivedHttpAuthRequest: " + host);
String user = "a username"; //get this string from wherever you want
String password = "a password"; //get this string from wherever you want
handler.proceed(user, password);
}
}
关于java - 来自 MS Exchange OWA 的 HTML 正文中的响应 'Bad request',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24736043/