gpt4 book ai didi

java - Android WebView - 使用经过身份验证的代理

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:41:36 26 4
gpt4 key购买 nike

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

虽然关于 very helpful previous answer 的说明很棒,我正在尝试找到一种方法来配置代理主机:端口 用户名:密码。

我的约束是:

  • 手机未 root - 尝试重现客户报告的错误,宁愿不偏离典型的客户设置
  • 在 Froyo 上运行三星 Galaxy S
  • 基于 2.1 构建

Android 应用程序不是我通常使用的东西,也不是我的选择,所以如果我公然遗漏了细节,请多多包涵 ;)

最佳答案

WebView android proxy配置,用于基本方案抢占式代理认证,

从Android 2.2开始,可以设置extra header用于认证。下面可以为webView的http请求添加header:

    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);
}

对于旧版本,可以通过反射在android.webkit.Network中的mProxyUserNamemProxyPassword上设置抢占式代理身份验证:

public void loadUrl(WebView view, String url, String proxyUserName, String proxyPassword){
try{
Class networkClass = Class.forName("android.webkit.Network");
if (networkClass != null) {
Object networkObj = invokeMethod(networkClass, "getInstance", new Object[]{view.getContext()}, Context.class);
if (networkObj != null) {
Field mProxyUserName = obj.getClass().getDeclaredField("mProxyUserName");
mProxyUserName.setAccessible(true);mProxyUserName.set(networkObj, proxyUserName);
Field mProxyPassword = obj.getClass().getDeclaredField("mProxyPassword");
mProxyPassword.setAccessible(true);mProxyPassword.set(networkObj, proxyPassword);
}
}
}catch(Exception e){
e.printStackTrace();
}
view.loadUrl(url);
}

当你加载一个新的 url 时,这两个 loadUrl() 必须需要再次调用。这是非常重要的。因此,应该使用自定义 WebViewClient 来覆盖 shouldOverrideUrlLoading(WebView view, String url)

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 上设置 WebViewClient:

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

关于java - Android WebView - 使用经过身份验证的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8236156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com