Android:在WebView中禁用带有标题的X-Requested-With

Android:在WebView中禁用带有标题的X-Requested-With,android,android-webview,Android,Android Webview,我试图让我的WebView标题看起来像用户只是使用常规浏览器,而不是使用WebView。据我所知,这些标题完全相同,只是WebView还发送了一个X-Requested-With标题,其中包含应用程序包名称。有什么方法可以防止这种情况发生吗?您可以在Android API>11上这样做 public class AndroidMobileAppSampleActivity extends Activity { Map<String, String> extraHeaders = ne

我试图让我的WebView标题看起来像用户只是使用常规浏览器,而不是使用WebView。据我所知,这些标题完全相同,只是WebView还发送了一个X-Requested-With标题,其中包含应用程序包名称。有什么方法可以防止这种情况发生吗?

您可以在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;
    }
}
}
公共类AndroidMobileAppSampleActivity扩展活动{
Map extraHeaders=newhashmap();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView mainWebView=(WebView)findViewById(R.id.mainWebView);
//必须定义X-Requested-With,如果缺少标题,则webview将
//添加您的包名
附加标题。放置(“X-request-With”,“your presentation”);
WebSettings WebSettings=mainWebView.getSettings();
setJavaScriptEnabled(true);
mainWebView.setWebViewClient(新的MyCustomWebViewClient());
mainWebView.setScrollBarStyle(视图.滚动条\u内部\u覆盖);
mainWebView.loadUrl(“http://www.somesite.com“,额外标题);
}
私有类MyCustomWebViewClient扩展了WebViewClient{
@凌驾
公共WebResourceResponse应接受请求(WebView,
字符串(url){
//要执行此操作,必须使用
//HttpClient请求
//并将其传递给新的WebResourceResponse
返回新的WebResourceResponse(response.ContentType、response.ContentEncoding、responseStream);
}
@凌驾
公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){
//再把你的头贴在这里
loadUrl(url,extraHeader);
返回true;
}
}
}

+1通常x-requested-with用于检测ajax请求,当android发送每个请求的标题时,会出现这种情况,不管是否是ajax。这听起来很像@KingFu-你能完全丢弃x-request-with标题吗?因为所有答案都是关于如何修改或编辑标题,而不是如何删除或禁用标题。这意味着我们只能修改“X-Requested-With”标题的值。有没有办法完全删除或丢弃它?这只会修改此url请求中的值,所有从响应html启动的js和图像请求仍然具有X-Requested-With中的原始值,但这不适用于
POST
请求,对吗?