java - 来自 MS Exchange OWA 的 HTML 正文中的响应 'Bad request'

标签 java android webview exchange-server outlook-web-app

我在 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/ ':

enter image description here

然后我手动输入我的域中的用户名和密码。 但我在 WebView 中收到错误消息页面(响应代码 200):

<head><head></head><body>Bad Request</body></head>

屏幕截图:

enter image description here

但是当我在任何浏览器(Chrome)中打开此页面时,我会正确输入 OWA 邮件页面: enter image description here

为什么 Exchange 服务器返回 html 页面,正文中有错误?

我需要向 WebView 属性添加什么?

添加: 另外,当我在 PC 窗口上的桌面浏览器中打开此页面时,浏览器(而非网站)内会弹出用户名和密码:

enter image description here

添加解决方案 我发现我的错误。我检查 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/

相关文章:

java - 灯笼终端输入不断重复

java - 等待线程在 shutdownhook 中写入更改

c# - 无法定位 Android 应用中内存泄漏的原因

Android 模拟器在运行 'app' 后留在 Android Studio 后面

java - 在 Java 中,如何将包含数组的字符串转换为实际的数组

android - 错误/Web 控制台 : Uncaught Error: Too much time spent in unload handler

objective-c - 禁用 WebView 中的拖动

java - 如何修复“"can' t find symbol”的这个实例?

java - 解析文档时如何将文档中字符串的一部分替换为另一个字符串

java - 如何将 WebView 的内容居中?