获取Android中webviewclient 401.2错误 [英] Getting 401.2 error in Android webviewclient

查看:215
本文介绍了获取Android中webviewclient 401.2错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发一个移动应用程序来访问内部网站的机器人。本网站的SSL证书是好的。这样我可以说,因为当我打开网站在Android浏览器,它不说,证书有问题。现在,我使用webviewclient内我的应用程序访问相同的网站,应用程序抛出401.2错误 - 您无权查看此页。请帮帮我吧。

 包com.example.kms​​;

进口android.app.Activity;
进口android.graphics.Bitmap;
进口android.net.http.SslCertificate;
进口android.net.http.SslError;
进口android.os.Bundle;
进口android.view.KeyEvent;
进口android.webkit.SslErrorHandler;
进口android.webkit.WebView;
进口android.webkit.WebViewClient;
进口android.webkit.CookieManager;

/ *
 *创建一个应用程序打开任何URL中的应用程序中,点击从URL的链接的演示
不要打开本机的浏览器,但该网址应在同一屏幕中打开。
 * /
公共类MainActivity延伸活动{
    / **第一次创建活动时调用。 * /

    的WebView网页;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);

        网页=(web视图)findViewById(R.id.webview01);
        web.setWebViewClient(新myWebClient());
        web.getSettings()setJavaScriptEnabled(真)。
        web.loadUrl(https://kms.techmahindra.com);
    }

    公共类myWebClient扩展WebViewClient
    {
        @覆盖
        公共无效onPageStarted(web视图查看,字符串URL,位图图标){
            // TODO自动生成方法存根
            super.onPageStarted(查看,网址,网站图标);
        }

        @覆盖
        公共布尔shouldOverrideUrlLoading(web视图查看,字符串URL){
            // TODO自动生成方法存根


        view.loadUrl(https://kms.techmahindra.com);

            返回true;

        }
        @覆盖
        公共无效onReceivedLoginRequest(web视图查看,字符串的境界,
                        字符串帐户字符串参数){

                super.onReceivedLoginRequest(查看,境界,账号,参数);
                通信System.err.println(境界);
                通信System.err.println(账户);
                的System.out.println(参数);
        }
        @覆盖
        公共无效onReceivedSslError(web视图来看,SslErrorHandler处理程序,
                        SslError错误){
                通信System.err.println(SSL错误);
                SslCertificate证书= error.getCertificate();
                通信System.err.println(certificate.getIssuedBy()getCName());
                通信System.err.println(certificate.getIssuedBy()getDName());
                通信System.err.println(certificate.getValidNotAfterDate());
                //handler.handleMessage(handler.obtainMessage());
                //handler.proceed();
        }
        @覆盖
        公共无效onReceivedError(web视图来看,INT错误code,
                        字符串描述,字符串failingUrl){
                // TODO自动生成方法存根
                super.onReceivedError(查看,错误code,说明,failingUrl);
                通信System.err.println(错误code + - +说明书+ - + failingUrl);
        }
    }

    //为了处理后退键preSS事件的WebView回到previous屏幕。
   @覆盖
   公共布尔的onkeydown(INT键code,KeyEvent的事件)
  {
    如果((钥匙code == KeyEvent.KEY code_BACK)及和放大器; web.canGoBack()){
        web.goBack();
        返回true;
    }
    返回super.onKeyDown(键code,事件);
   }
}
 

下面是我的完整的logcat:

  08-10 14:43:23.495:D /内核(130):17865.949615] MAX17040 0-0036:棉絮:100%,4186毫伏
08-10 14:43:26.735:D / AndroidRuntime(9740):>>>>>> AndroidRuntime开始com.android.internal.os.RuntimeInit<<<<<<
08-10 14:43:26.735:D / AndroidRuntime(9740):CheckJNI为OFF
08-10 14:43:27.075:D / AndroidRuntime(9740):调用主入口com.android.commands.pm.Pm
08-10 14:43:27.105:D / AndroidRuntime(9740):关闭虚拟机
08-10 14:43:27.105:D / dalvikvm(9740):GC_CONCURRENT释放101K,免费的82%466K / 2560K,暂停0毫秒+ 0毫秒
08-10 14:43:27.105:D / JDWP(9740):GOT唤醒信号,救助的选择了
08-10 14:43:27.105:D / dalvikvm(9740):调试器分离;对象注册了1项
08-10 14:43:27.555:D / AndroidRuntime(9752):>>>>>> AndroidRuntime开始com.android.internal.os.RuntimeInit<<<<<<
08-10 14:43:27.565:D / AndroidRuntime(9752):CheckJNI为OFF
08-10 14:43:27.916:D / AndroidRuntime(9752):调用主入口com.android.commands.am.Am
08-10 14:43:27.925:I / ActivityManager(251):开始{行为= android.intent.action.MAIN猫= [android.intent.category.LAUNCHER] FLG = 0x10000000处CMP = com.example.kms​​ /。从PID 9752 MainActivity}
08-10 14:43:27.955:D / AndroidRuntime(9752):关闭虚拟机
08-10 14:43:27.955:D / dalvikvm(9752):GC_CONCURRENT释放101K,免费的81%488K / 2560K,暂停1毫秒+ 1毫秒
08-10 14:43:27.955:D / JDWP(9752):GOT唤醒信号,救助的选择了
08-10 14:43:27.955:D / dalvikvm(9752):调试器分离;对象注册了1项
08-10 14:43:28.205:I / ActivityManager(251):显示com.example.kms​​ / .MainActivity:+ 242ms
08-10 14:43:28.345:D / SurfaceFlinger(122):在0xb​​3180释放缓冲区
08-10 14:43:28.395:D / SurfaceFlinger(122):在0x747e8释放缓冲区
08-10 14:43:40.555:D /内核(130):17883.013092] gpio_keys_scan_keys:键1-66,0(200)继续去抖
08-10 14:43:40.565:D /内核(130):17883.023223] gpio_keys_scan_keys:键1-66,0(200)继续去抖
08-10 14:43:40.575:D /内核(130):17883.033325] gpio_keys_scan_keys:键1-66,0(200)继续去抖
08-10 14:43:40.715:D /内核(130):17883.173370] gpio_keys_scan_keys:键1-66,0(200)继续去抖
08-10 14:43:40.725:D /内核(130):17883.183502] gpio_keys_scan_keys:键1-66,0(200)继续去抖
08-10 14:43:40.735:D /内核(130):17883.193634] gpio_keys_scan_keys:键1-66,0(200)继续去抖
08-10 14:43:40.755:I / ActivityManager(251):开始{行为= android.intent.action.MAIN猫= [android.intent.category.HOME] FLG = 0x10200000 CMP = com.sonyericsson.home /。从PID 251 HomeActivity}
08-10 14:43:40.855:E /存储(548):读取时的I / O错误:slowloading.zip
08-10 14:43:40.895:D / OpenGLRenderer(9465):刷新缓存(模式1)
08-10 14:43:40.895:D / OpenGLRenderer(9465):刷新缓存(模式0)
08-10 14:43:41.115:D / SurfaceFlinger(122):在0xb​​a0c0释放缓冲区
08-10 14:43:41.135:D / dalvikvm(548):GC_FOR_ALLOC释放6623K,41%免费15630K / 26119K,暂停40毫秒
08-10 14:43:41.205:W / InputManagerService(251):对非重点客户com.android.internal.view.IInputMethodClient$Stub$Proxy@2c28f418开始输入(UID = 10152 PID = 9465)
08-10 14:43:41.305:D / dalvikvm(548):GC_CONCURRENT释放450K,免费35%17218K / 26119K,暂停2MS + 6ms的
08-10 14:43:41.385:D / dalvikvm(548):GC_CONCURRENT释放1947K,免费的34%17283K / 26119K,暂停2MS + 5ms的
08-10 14:43:41.405:I / ActivityManager(251):显示com.sonyericsson.home / .HomeActivity:+ 624ms
08-10 14:43:41.595:D / dalvikvm(548):GC_CONCURRENT释放138K,免费的27%19192K / 26119K,暂停3毫秒+ 5ms的
08-10 14:43:41.615:D / SurfaceFlinger(122):在0x747e8释放缓冲区
08-10 14:43:42.595:D / dalvikvm(548):GC_CONCURRENT释放711K,免费22%20487K / 26119K,暂停2MS + 5ms的
 

解决方案

尝试重写onReceivedHttpAuthRequest()在你的WebViewClient是这样的:

  @覆盖
    公共无效onReceivedHttpAuthRequest(web视图来看,HttpAuthHandler处理器,主机字符串,字符串的境界){

        super.onReceivedHttpAuthRequest(查看,处理程序,主机,境界);

        view.setHttpAuthUsernamePassword(主机,领域,用户名,密码);

    }
 

资源链接:<一href="http://developer.android.com/reference/android/webkit/WebViewClient.html#onReceivedHttpAuthRequest%28android.webkit.WebView,%20android.webkit.HttpAuthHandler,%20java.lang.String,%20java.lang.String%29"相对=nofollow>链接

请参阅如果这对你的作品。

如果没有,你可以尝试这个,以及:)

I am developing a mobile app to access a intranet site in android. SSL certificate of this website is fine. This I can say because when I open the site in android browser, it doesn't say that the certificate has a issue. Now I am using webviewclient to access the same site within my application, and the app throws a 401.2 error - You are not authorized to view this page. Kindly help me.

    package com.example.kms;

import android.app.Activity;
import android.graphics.Bitmap;
import android.net.http.SslCertificate;
import android.net.http.SslError;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.CookieManager;

/*
 * Demo of creating an application to open any URL inside the application and clicking on any link from that URl
should not open Native browser but  that URL should open in the same screen.
 */
public class MainActivity extends Activity {
    /** Called when the activity is first created. */

    WebView web;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        web = (WebView) findViewById(R.id.webview01);
        web.setWebViewClient(new myWebClient());
        web.getSettings().setJavaScriptEnabled(true);
        web.loadUrl("https://kms.techmahindra.com");
    }

    public class myWebClient extends WebViewClient
    {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // TODO Auto-generated method stub


        view.loadUrl("https://kms.techmahindra.com");

            return true;

        }
        @Override 
        public void onReceivedLoginRequest(WebView view, String realm, 
                        String account, String args) { 

                super.onReceivedLoginRequest(view, realm, account, args); 
                System.err.println(realm); 
                System.err.println(account); 
                System.out.println(args); 
        } 
        @Override 
        public void onReceivedSslError(WebView view, SslErrorHandler handler, 
                        SslError error) { 
                System.err.println("SSL ERROR"); 
                SslCertificate certificate = error.getCertificate(); 
                System.err.println(certificate.getIssuedBy().getCName()); 
                System.err.println(certificate.getIssuedBy().getDName()); 
                System.err.println(certificate.getValidNotAfterDate()); 
                //handler.handleMessage(handler.obtainMessage()); 
                //handler.proceed(); 
        } 
        @Override 
        public void onReceivedError(WebView view, int errorCode, 
                        String description, String failingUrl) { 
                // TODO Auto-generated method stub 
                super.onReceivedError(view, errorCode, description, failingUrl); 
                System.err.println(errorCode + " - " + description + "-" + failingUrl); 
        } 
    }

    // To handle "Back" key press event for WebView to go back to previous screen.
   @Override
   public boolean onKeyDown(int keyCode, KeyEvent event)
  {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && web.canGoBack()) {
        web.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
   }
}

Here is my complete logcat:

08-10 14:43:23.495: D/kernel(130): [17865.949615] max17040 0-0036: batt:100%, 4186 mV
08-10 14:43:26.735: D/AndroidRuntime(9740): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
08-10 14:43:26.735: D/AndroidRuntime(9740): CheckJNI is OFF
08-10 14:43:27.075: D/AndroidRuntime(9740): Calling main entry com.android.commands.pm.Pm
08-10 14:43:27.105: D/AndroidRuntime(9740): Shutting down VM
08-10 14:43:27.105: D/dalvikvm(9740): GC_CONCURRENT freed 101K, 82% free 466K/2560K, paused 0ms+0ms
08-10 14:43:27.105: D/jdwp(9740): Got wake-up signal, bailing out of select
08-10 14:43:27.105: D/dalvikvm(9740): Debugger has detached; object registry had 1 entries
08-10 14:43:27.555: D/AndroidRuntime(9752): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
08-10 14:43:27.565: D/AndroidRuntime(9752): CheckJNI is OFF
08-10 14:43:27.916: D/AndroidRuntime(9752): Calling main entry com.android.commands.am.Am
08-10 14:43:27.925: I/ActivityManager(251): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.example.kms/.MainActivity} from pid 9752
08-10 14:43:27.955: D/AndroidRuntime(9752): Shutting down VM
08-10 14:43:27.955: D/dalvikvm(9752): GC_CONCURRENT freed 101K, 81% free 488K/2560K, paused 1ms+1ms
08-10 14:43:27.955: D/jdwp(9752): Got wake-up signal, bailing out of select
08-10 14:43:27.955: D/dalvikvm(9752): Debugger has detached; object registry had 1 entries
08-10 14:43:28.205: I/ActivityManager(251): Displayed com.example.kms/.MainActivity: +242ms
08-10 14:43:28.345: D/SurfaceFlinger(122): Release buffer at 0xb3180
08-10 14:43:28.395: D/SurfaceFlinger(122): Release buffer at 0x747e8
08-10 14:43:40.555: D/kernel(130): [17883.013092] gpio_keys_scan_keys: key 1-66, 0 (200) continue debounce
08-10 14:43:40.565: D/kernel(130): [17883.023223] gpio_keys_scan_keys: key 1-66, 0 (200) continue debounce
08-10 14:43:40.575: D/kernel(130): [17883.033325] gpio_keys_scan_keys: key 1-66, 0 (200) continue debounce
08-10 14:43:40.715: D/kernel(130): [17883.173370] gpio_keys_scan_keys: key 1-66, 0 (200) continue debounce
08-10 14:43:40.725: D/kernel(130): [17883.183502] gpio_keys_scan_keys: key 1-66, 0 (200) continue debounce
08-10 14:43:40.735: D/kernel(130): [17883.193634] gpio_keys_scan_keys: key 1-66, 0 (200) continue debounce
08-10 14:43:40.755: I/ActivityManager(251): START {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.sonyericsson.home/.HomeActivity} from pid 251
08-10 14:43:40.855: E/Storage(548): I/O error when reading: slowloading.zip
08-10 14:43:40.895: D/OpenGLRenderer(9465): Flushing caches (mode 1)
08-10 14:43:40.895: D/OpenGLRenderer(9465): Flushing caches (mode 0)
08-10 14:43:41.115: D/SurfaceFlinger(122): Release buffer at 0xba0c0
08-10 14:43:41.135: D/dalvikvm(548): GC_FOR_ALLOC freed 6623K, 41% free 15630K/26119K, paused 40ms
08-10 14:43:41.205: W/InputManagerService(251): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@2c28f418 (uid=10152 pid=9465)
08-10 14:43:41.305: D/dalvikvm(548): GC_CONCURRENT freed 450K, 35% free 17218K/26119K, paused 2ms+6ms
08-10 14:43:41.385: D/dalvikvm(548): GC_CONCURRENT freed 1947K, 34% free 17283K/26119K, paused 2ms+5ms
08-10 14:43:41.405: I/ActivityManager(251): Displayed com.sonyericsson.home/.HomeActivity: +624ms
08-10 14:43:41.595: D/dalvikvm(548): GC_CONCURRENT freed 138K, 27% free 19192K/26119K, paused 3ms+5ms
08-10 14:43:41.615: D/SurfaceFlinger(122): Release buffer at 0x747e8
08-10 14:43:42.595: D/dalvikvm(548): GC_CONCURRENT freed 711K, 22% free 20487K/26119K, paused 2ms+5ms

Try to override onReceivedHttpAuthRequest() with in your WebViewClient like this:

 @Override
    public void onReceivedHttpAuthRequest(WebView view,HttpAuthHandler handler, String host, String realm) {

        super.onReceivedHttpAuthRequest(view, handler, host, realm);

        view.setHttpAuthUsernamePassword(host, realm, username, password);

    }

Resource Link: Link

See if this works for you.

If doesn't, you can try this as well :)

这篇关于获取Android中webviewclient 401.2错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆