2013-04-04 59 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