Android WebView – 带有经过身份validation的代理
我目前正在尝试调试围绕WebView构建的Android应用程序。 我负责处理的开发网络环境(不是我的选择,它是’企业’安全决策)是WPA WiFi +代理服务器+代理身份validation。
虽然上一个非常有用的答案的说明很棒,但我正在尝试找到一种方法来配置代理主机:端口和用户名:密码。
我的约束是:
- 电话没有根植 – 尝试重现客户报告的错误,宁愿不偏离典型的客户设置
- 在Froyo上运行三星Galaxy S.
- 建于2.1
Android应用程序不是我平常的事情,再次不是我的选择,所以如果我公然缺少细节,那就好了;)
看到这个相关的答案 。
使用WebView android代理配置,用于基本方案抢先代理身份validation,
从Android 2.2开始,可以设置额外的标头进行身份validation。 以下内容可以为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 header = new HashMap(); header.put(credHeader.getName(), credHeader.getValue()); view.loadUrl(url, header); }
对于旧版本,可以通过reflection在android.webkit.Network
的mProxyUserName
和mProxyPassword
上设置抢先代理身份validation:
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"));
- 使用onOptionsItemSelected从PreferenceArag和PreferenceFragments上升
- 为什么android studio显示“在constraintlayout中缺少约束”的错误?
- HttpURLConnection即使在setDoOutput(true)之后执行get请求,setRequestMethod(“POST”)setRequestProperty(“Content”
- 如何在主要活动中循环一段代码?
- Android上的WiFi Direct工作不正常
- 如何让应用等待,然后开始活动或回去?
- 如何将ArrayList从AsyncTask返回到另一个类?
- Gradle Android Build Project错误:无法找到元数据资源
- Android导航抽屉,更改文字/hover颜色