2013-04-04 60 views
0

假设我需要检索在我的应用中制作Httpget的网站的HTML。但是,如果网站有内容的移动版本,我想要这个版本,而不是通常的/桌面版本(例如,如果您在手机中访问http://techcrunch.com/,您将获得一个不同的html,如果您访问此网站在桌面上)如何创建HTTP连接并检索网站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配置“User-Agent”,但似乎我需要配置其他任何东西。 有什么帮助吗?

回答

2

我已经解决了这个问题。

我的错误是在该行

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

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

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

这样的HTTPGet将获取移动版的网站内容。

1

由于大多数网站都会查看用户代理,以确定所请求的页面是全部版本还是移动版本,我认为您的选择是正确的。我认为你最好的选择是将用户代理字符串设置为硬编码值,也许只是为了首先测试?莫比是这样的:

的Mozilla/5.0(Linux的; U;安卓4.0.3; KO-KR; LG-L160L构建/ IML74K) 为AppleWebKit/534.30(KHTML,例如Gecko)版本/ 4.0移动Safari浏览器 /534.30

+0

感谢提示@John,但是在我的手机中调用'System.getProperty(“http.agent”)'时,它会返回'Dalvik/1.6.0(Linux; U; Android 4.1.2; GT-I8190 Build/JZO54K)'。它应该为这个用户代理工作,对吧?我会尝试你的硬编码的用户代理。 – 2013-04-04 18:51:29

+0

我想这可能是这样的,可能不是问题,那么我认为他们通常只用正则表达式在字符串中查找'Android'。也许techcrunch做了一些特别的事情。他们用来检测移动设备的其他方式是查看支持的MIME类型或设备宽度。 – John 2013-04-04 18:54:52

+0

您写过的用户代理工作。现在,我需要找到获取设备用户代理并将其放入httpget的正确方法(如果您认为wabview能够正确执行此操作,那么必须有一种方法可以实现这一点) – 2013-04-04 19:00:03