首页 文章

来自MS Exchange OWA的HTML-body中的响应'Bad request'

提问于
浏览
2

我在myActivity中创建了带有WebView的Android应用程序 .

public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); //在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>错误请求</ body> </ head>

截图:

enter image description here

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

为什么Exchange服务器返回html-page在body中有错误?

我需要添加到WebView属性?

Add: 此外,当我在PC窗口的桌面浏览器中打开此页面时,在浏览器(而不是站点)内弹出用户名和密码:

enter image description here

Add solution 我发现了我的错误 . 我在WebView.myWebViewClient.onPageFinish中检查URL,并且URL与我的起始URL不同 . 我更正此网址,我的网页将打开正确 .

1 回答

  • 3

    更改:

    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 .

    Answer extension

    此外,为了摆脱该身份验证请求,您应该使用添加到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);
    
        }
    }
    

相关问题