0

假设我需要检索Httpget在我的应用程序中制作的网站的 HTML。但是,如果网站有内容的移动版本,我想要这个版本,而不是通常的/桌面版本(例如,如果您在手机中访问http://techcrunch.com/,您会得到一个不同的 html如果您在桌面上访问此网站,将获得)

我制作了以下代码:

HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url);
request.setHeader("User-Agent", System.getProperty("http.agent"));
HttpResponse response = client.execute(request);

BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
    sb.append(line);
}
String html = sb.toString();

但在那之后,该html字符串包含网站的“桌面”版本,而不是移动版本的 HTML。我的直觉说我只需要为httpget配置“用户代理”,但似乎我需要配置其他任何东西。有什么帮助吗?

4

2 回答 2

2

我已经解决了这个问题。

我的错误是在线

request.setHeader("User-Agent", System.getProperty("http.agent"));

要获得正确的用户代理,我需要创建一个Webview并执行以下操作:

request.setHeader("User-Agent", webview.getSettings().getUserAgentString());

这样,HTTPGet将检索网站内容的移动版本。

于 2013-04-04T19:06:12.373 回答
1

我认为你在正确的轨道上,因为大多数网站都会查看用户代理来确定请求的页面应该是完整版还是移动版。我认为您最好的选择是将用户代理字符串设置为硬编码值,也许只是为了测试?可能是这样的:

Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) 版本/4.0 Mobile Safari/534.30

于 2013-04-04T18:45:02.343 回答