2012-11-09 13 views
5

Cố gắng thay đổi chuỗi User-Agent trong yêu cầu HTTP của ứng dụng Android. Tôi đã thử nghiệm điều này cùng với wireshark và trình mô phỏng, và đã thấy rằng mặc dù tôi đã đặt chuỗi useragent trong chế độ xem web, yêu cầu loadUrl được liên kết không sử dụng chuỗi tác nhân người dùng này. Thay vào đó, tôi nhìn thấy chuỗi ký tự Dalvik trong quá trình capture Wireshark. Đây là đoạn mã trừu tượng. Bất kỳ ý tưởng? Hay giả lập không hỗ trợ điều này?setUserAgentString trong chế độ xem web trên Android không ảnh hưởng đến tiêu đề HTTP được sử dụng trong loadURL()

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

Trả lời

1

Trả lời câu hỏi của riêng tôi. Có vẻ như trình mô phỏng cho bất kỳ lý do nào không lấy chuỗi tác nhân người dùng từ chế độ xem web. Tôi đã không tìm ra lý do cho điều này tuy nhiên. Mã hoạt động tốt trên thiết bị thực.

0

Bạn bỏ lỡ ghi đè hành vi Android mặc định trên url mở (khởi chạy trình duyệt mặc định). Để sử dụng trình duyệt tùy chỉnh của bạn để navitage, bạn chỉ phải đính kèm một WebViewClient để WebView

Đó là đạt thêm dòng sau vào code của bạn:

webView.setWebViewClient(new WebViewClient()); 

Chúc mừng, Rodrigo

+0

Tôi tin rằng tôi đang làm điều đó trong dòng "webView.setWebViewClient (new WebViewClient() ....." – damcify