Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android WebView-具有经过身份验证的代理_Java_Android_Proxy_Android Webview - Fatal编程技术网

Java Android WebView-具有经过身份验证的代理

Java Android WebView-具有经过身份验证的代理,java,android,proxy,android-webview,Java,Android,Proxy,Android Webview,我目前正在调试一个围绕WebView构建的Android应用程序。我负责处理的开发网络环境(不是我的选择,这是一个“enterprisey”安全决策)是WPA WiFi+代理服务器+代理身份验证 虽然a上的说明非常好,但我正试图找到一种方法来配置代理主机:端口和用户名:密码 我的限制是: 手机没有根-试图复制客户报告的错误,宁愿不偏离典型的客户设置 在Froyo上运行三星Galaxy S 以2.1为基础构建 安卓应用程序不是我通常使用的东西,同样也不是我的选择,所以如果我公然遗漏了细节,那就

我目前正在调试一个围绕WebView构建的Android应用程序。我负责处理的开发网络环境(不是我的选择,这是一个“enterprisey”安全决策)是WPA WiFi+代理服务器+代理身份验证

虽然a上的说明非常好,但我正试图找到一种方法来配置代理主机:端口和用户名:密码

我的限制是:

  • 手机没有根-试图复制客户报告的错误,宁愿不偏离典型的客户设置
  • 在Froyo上运行三星Galaxy S
  • 以2.1为基础构建
安卓应用程序不是我通常使用的东西,同样也不是我的选择,所以如果我公然遗漏了细节,那就和蔼可亲一点;)

通过配置,对于基本方案抢占式代理身份验证

从Android 2.2开始,可以为身份验证设置额外的头。以下内容可以为
webView
的http请求添加标题:

    public void loadUrl(WebView view, String url, String proxyUserName, String proxyPassword){
            UsernamePasswordCredentials creds= new UsernamePasswordCredentials(proxyUserName, proxyPassword);
            Header credHeader = BasicScheme.authenticate(creds, "UTF-8", true);
            Map<String, String> header = new HashMap<String, String>();
            header.put(credHeader.getName(), credHeader.getValue());
            view.loadUrl(url, header);
    }
加载新url时,必须再次调用
loadUrl()
。这是非常重要的。 因此,应该使用自定义的
WebViewClient
来覆盖
shouldOverrideUrlLoading(WebView视图,字符串url)

并在webView上设置WebViewClient:

webView.setWebViewClient(new ProxyAuthWebViewClient("user", "password"));

嗨,这个解决方案适用于android 4.1吗?还有别的选择吗?谢谢,@toufik_at,基于android版本,使用代理可能会有所不同。但是我确信在安卓2.2之后添加一个标题总是有效的。设置
WebViewClient
是最好的实用答案!
class ProxyAuthWebViewClient extends WebViewClient {
    String proxyUserName;
    String proxyPassword;
    public ProxyAuthWebViewClient(String proxyUserName, String proxyPassword){
        this.proxyUserName = proxyUserName;
        this.proxyPassword = proxyPassword;
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        loadUrl(view, url, proxyUserName, proxyPassword);
        return true ;
    }
}
webView.setWebViewClient(new ProxyAuthWebViewClient("user", "password"));