androidandroid-webview

Android: Disable X-Requested-With Header In WebView


I'm trying to make my WebView headers look like the user is just using the regular browser and not using a WebView. From what I can gather the headers are identical apart that the WebView also sends an X-Requested-With header containing the apps package name. Is there any way of preventing this?


Solution

  • You can do it for Android API > 11

    public class AndroidMobileAppSampleActivity extends Activity {
    Map<String, String> extraHeaders = new HashMap<String, String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        WebView mainWebView = (WebView) findViewById(R.id.mainWebView);
        // must define X-Requested-With, if header missing, then webview will
        //add your package name
        extraHeaders.put("X-Requested-With", "your presentation");
        WebSettings webSettings = mainWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        mainWebView.setWebViewClient(new MyCustomWebViewClient());
        mainWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
        mainWebView.loadUrl("http://www.somesite.com", extraHeaders);
    }
    
    private class MyCustomWebViewClient extends WebViewClient {
        @Override
        public WebResourceResponse shouldInterceptRequest(WebView view,
             String url) {
            // TODO Here you must overwrite request  using your 
            // HttpClient Request
            // and pass it to new WebResourceResponse
            return new  WebResourceResponse(response.ContentType, response.ContentEncoding, responseStream);
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // Apply again your heades here 
            view.loadUrl(url, extraHeaders);
            return true;
        }
    }
    }