2011-11-23 167 views
4

我目前正在嘗試調試圍繞WebView構建的Android應用程序。我負責處理的開發網絡環境(不是我的選擇,它是一個'企業'的安全決策)是WPA WiFi +代理服務器+代理認證。Android WebView - 帶有身份驗證代理

雖然very helpful previous answer上的說明很好,但我試圖找到一種方法來配置代理主機:端口用戶名:密碼。

我的約束是:

  • 手機是不是植根 - 試圖重現客戶報告的bug,寧可不典型客戶設置
  • 上升級Froyo
  • 運行三星Galaxy S內置偏離針對2.1

Android應用程序是不是我平常的事情,又不是我的選擇,所以如果我大搖大擺失落的細節,是不錯的;)

回答

0

看到這個Related Answer

+0

謝謝!這個問題後來被問到,解決方案的需求已經得到解決,但很好解決。 – Stoive

6

隨着WebView android proxy配置,基本方案先發制人的代理認證,

從Android 2.2的開始,附標題可以進行身份​​驗證設置。下面可以添加標題爲webView的http請求:

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

當加載:

​​

對於舊版本,搶佔代理認證可以在mProxyUserNamemProxyPasswordandroid.webkit.Network通過反射設置一個新的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 ; 
    } 
} 

,並設置WebViewClient上的網頁視圖:

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

@Yueng感謝上帝一直在努力......非常感謝! – hevi

+1

嗨, 這個解決方案適用於android 4.1嗎? 任何替代? 謝謝, – Okcomputer

+0

@toufik_at,使用Proxy可能會根據android版本的不同而不同。但我確定在Android 2.2之後總是會添加一個標題。 – Yeung