2012-11-09 67 views
5

一直試圖更改Android應用程序的HTTP請求中的用戶代理字符串。我已經與wireshark和模擬器一起進行了測試,並且已經看到雖然我在webview中設置了useragent字符串,但關聯的loadUrl請求不使用此用戶代理字符串。相反,我在wireshark捕獲中看到Dalvik useragent字符串。 這是代碼摘要。有任何想法嗎?還是模擬器不支持這個?Android webview中的setUserAgentString對loadURL中使用的HTTP標頭沒有影響()

@Override 
public void run() { 
    assert(context != null); 

    ... 
    ... 
    webView = new WebView(context); 
    ... 
    String defaultUserAgent = "betaUAteststring"; 


    // Clear per-application caches etc 
    webView.clearCache(true); 
    webView.clearHistory(); 
    webView.getSettings().setAppCacheEnabled(false); 
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
    webView.getSettings().setJavaScriptEnabled(true); 


    webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageFinished(WebView view, String url) { 
     .... 
     } 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     .. 
     } 

     @Override 
     public void onLoadResource(WebView view, String url) { 
     ... 
     } 
    }); 


    // Start loading 


    webView.getSettings().setUserAgentString(defaultUserAgent); 
    String setUA = webView.getSettings().getUserAgentString(); 
    //--> logging here shows the correct user agent, so the webview does accept the value 
    // However the following statement does not result in an http request with the webviews user agent 
    webView.loadUrl(url); 

    //Alternative doesn't help either (and shouldn't according to javadoc) 

    //Map<String,String> headerMap = new HashMap<String,String>(); 
    //headerMap.put("User-Agent","uaTestInAMap");   
    //webView.loadUrl(url, headerMap); 
} 

回答

1

回答我自己的問題。看起來,無論出於何種原因,模擬器都沒有從webview中獲取用戶代理字符串。但是我沒有找到原因。 該代碼在實際設備上正常工作。

0

您錯過了在開放url上覆蓋默認的Android行爲(啓動默認瀏覽器)。 要使用自定義瀏覽器navitage,你只需要一個WebViewClient重視的WebView

即實現添加以下行代碼:

webView.setWebViewClient(new WebViewClient()); 

乾杯, 羅德里戈

+0

我相信我我正在做的「webView.setWebViewClient(新的WebViewClient().....」 – damcify

相關問題