Java 如何告诉/欺骗每个网站,我';您是从PC输入的(是否更改X-WAP-Profile?)?

Java 如何告诉/欺骗每个网站,我';您是从PC输入的(是否更改X-WAP-Profile?)?,java,android,android-webview,Java,Android,Android Webview,我有一个webview,它显示站点的移动版本。我已经做了“切换”,允许用户切换到网站的完整版本,如果他愿意的话。 所以,在第一次用户进入网站的移动版本,然后他可能会切换“开关”和网站的完整版本加载 现在发生的事情:对于一些站点来说,只要更改用户代理就足够了,当切换“开关”时,它们就可以从PC加载。但有些网站仍然能够检测到,我是从移动设备输入的,并且仍然向我显示移动版本 我怎样才能告诉所有网站,“我”不是移动设备,而是个人电脑? 比如: webView.getSettings().iAmPC(tr

我有一个webview,它显示站点的移动版本。我已经做了“切换”,允许用户切换到网站的完整版本,如果他愿意的话。 所以,在第一次用户进入网站的移动版本,然后他可能会切换“开关”和网站的完整版本加载

现在发生的事情:对于一些站点来说,只要更改用户代理就足够了,当切换“开关”时,它们就可以从PC加载。但有些网站仍然能够检测到,我是从移动设备输入的,并且仍然向我显示移动版本

我怎样才能告诉所有网站,“我”不是移动设备,而是个人电脑? 比如:

webView.getSettings().iAmPC(true);    
附言:例如:OperaMobile For Android(和Firefox)有这个功能(如果我在“首选项”中选择“桌面”,每个网站都会给我它的完整版本)。Android默认浏览器2.3.6-不是。 p.p.S:如果你知道如何实现它,即使不是在webview中,它也会很有用。 更新:似乎应该更改X-WAP-Profile标题,但仍未找到解决方案。有一种解决方案,但在应用程序中似乎无法使用。 p.p.p.S:我的应用程序具有根访问权限,因此,也接受需要根访问权限的解决方案
尝试使用随机或空
Accept
标题-无效。

一些网站使用脚本查询
navigator
对象以检查浏览器品牌/版本。Opera覆盖了这一点,您可能也希望如此。

一些网站使用脚本查询
导航器
对象,以检查浏览器品牌/版本。Opera覆盖了这一点,您可能也希望这样做。

x-wap-profile头添加到Webkit的中。因此,需要更改固件才能删除此标头

您可以做的是尝试拥有自己的httpclient并自己获取内容。这已经在这上面试过了

编辑:更新

DefaultHttpClient client = new DefaultHttpClient();
comments.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url){

                String content = "";
                try {
                   content = getUrlContent(url)
                } catch (Exception e) {
                   e.printStackTrace();
                }
                view.loadDataWithBaseURL("BaseWebUrl", content, "text/html", "utf-8", "");
                return true;
            }
        });


    synchronized String getUrlContent(String url) {


        // Create client and set specific user-agent string
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);
        //request.setHeader("User-Agent", sUserAgent);

        try {
            HttpResponse response = client.execute(request);

            // Check if server response is valid
            StatusLine status = response.getStatusLine();
            if (status.getStatusCode() != HTTP_STATUS_OK) {
               return "Error";
            }

            // Pull content stream from response
            HttpEntity entity = response.getEntity();
            return EntityUtils.toString(entity)
    }
}

x-wap-profile标题添加到Webkit的中。因此,需要更改固件才能删除此标头

您可以做的是尝试拥有自己的httpclient并自己获取内容。这已经在这上面试过了

编辑:更新

DefaultHttpClient client = new DefaultHttpClient();
comments.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url){

                String content = "";
                try {
                   content = getUrlContent(url)
                } catch (Exception e) {
                   e.printStackTrace();
                }
                view.loadDataWithBaseURL("BaseWebUrl", content, "text/html", "utf-8", "");
                return true;
            }
        });


    synchronized String getUrlContent(String url) {


        // Create client and set specific user-agent string
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);
        //request.setHeader("User-Agent", sUserAgent);

        try {
            HttpResponse response = client.execute(request);

            // Check if server response is valid
            StatusLine status = response.getStatusLine();
            if (status.getStatusCode() != HTTP_STATUS_OK) {
               return "Error";
            }

            // Pull content stream from response
            HttpEntity entity = response.getEntity();
            return EntityUtils.toString(entity)
    }
}


对不起,我的无知,@AlexeyFeldgendler,但是你能更深入地解释一下怎么做吗“覆盖
navigator
对象或指定方向,在那里我可以阅读更多有关它的信息?”?我试图独立地找到这些信息,但没有成功。我不知道。有可能WebKit根本不让你这么做。我只知道Opera就是这么做的。对不起,我的无知,@AlexeyFeldgendler,但你能更深入地解释一下怎么做吗“覆盖
navigator
对象或指定方向,在那里我可以阅读更多有关它的信息?”?我试图独立地找到这些信息,但没有成功。我不知道。有可能WebKit根本不让你这么做。我只知道Opera就是这样做的。有时webview包含X-WAP-Profile标题,有些网站检测到使用此标题,但我不确定是否可以更改此标题。@nandeesh谢谢,非常有用的信息,我会根据它更新我的问题。有时webview包含X-WAP-Profile标题,有些网站检测到使用此标题,但我不确定是否可以更改此标题。@nandeesh谢谢,非常有用的信息,如果问题太随意,我会根据它更新我的问题,但Eclipse显示以下错误
类型DefaultHttpClient的方法httpGet(String)未定义它似乎很接近。有些页面加载得很好。但有些页面只加载了部分内容。一些网站仍然能够检测移动设备=>加载移动版本(我在opera mobile中另外检查了它们,它正确加载了它们的完整版本)。请尝试取消对set useragent行的注释,并使用任何桌面useragent。另外,使用tcpdump检查是否发送了任何其他头使用您自己的httpclient不是最好的方式,我不确定它是否处理重试、重定向和其他类似的事情。您可能必须自己做“尝试取消对set useragent行的注释并使用任何桌面useragent”-没有效果。看来,以这种方式实现这一目标就像创建我自己的网络浏览器。。。感谢您的帮助,我稍后将继续尝试实现它,赏金将归您所有。抱歉,如果问题过于随意,但Eclipse向我显示以下错误
类型DefaultHttpClient的方法httpGet(String)未定义,它似乎已关闭。有些页面加载得很好。但有些页面只加载了部分内容。一些网站仍然能够检测移动设备=>加载移动版本(我在opera mobile中另外检查了它们,它正确加载了它们的完整版本)。请尝试取消对set useragent行的注释,并使用任何桌面useragent。另外,使用tcpdump检查是否发送了任何其他头使用您自己的httpclient不是最好的方式,我不确定它是否处理重试、重定向和其他类似的事情。您可能必须自己做“尝试取消对set useragent行的注释并使用任何桌面useragent”-没有效果。看来,以这种方式实现这一目标就像创建我自己的网络浏览器。。。谢谢你的帮助,我会继续我的努力,稍后实现它,赏金将是你的。