我正在下載一個網頁,然後使用正則表達式提取一些數據,使用正則表達式(不要大叫我,我知道一個合適的解析器會更好,但這是一個非常簡單的機器生成的頁面)。這在模擬器中正常工作,在使用wi-fi連接時在我的手機上工作良好,但在3G上不起作用 - 返回的字符串不一樣,我也沒有匹配。我可以想象它與數據包大小或延遲有關,但我無法弄清楚。使用Android下載網頁
我的代碼:
public static String getPage(URL url) throws IOException {
final URLConnection connection = url.openConnection();
HttpGet httpRequest = null;
try {
httpRequest = new HttpGet(url.toURI());
} catch (URISyntaxException e) {
e.printStackTrace();
}
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
HttpEntity entity = response.getEntity();
BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity);
InputStream stream = bufHttpEntity.getContent();
String ct = connection.getContentType();
final BufferedReader reader;
if (ct.indexOf("charset=") != -1) {
ct = ct.substring(ct.indexOf("charset=") + 8);
reader = new BufferedReader(new InputStreamReader(stream, ct));
}else {
reader = new BufferedReader(new InputStreamReader(stream));
}
final StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
stream.close();
return sb.toString();
}
這是我造成這種連接不良,或者是有一個錯誤在那裏?無論哪種方式,我該如何解決它?
更新: 下載超過3G的文件是一個比通過Wi-Fi更小的201個字節。雖然他們顯然都在下載正確的頁面,但3G卻缺少一大堆空白,還有一些HTML註釋出現在原始頁面中,我覺得有點奇怪。 3G在3G上採用不同的頁面來減少文件大小?
您是否嘗試過比較通過3G下載的內容與以其他方式下載的內容?他們有什麼不同? – pkaeding 2010-07-01 14:12:22
經過許多麻煩,我設法從設備上獲取文件 - 查看更新後的問題。 – blork 2010-07-01 14:37:28
無關的問題,你在這裏不必要地解僱兩個請求。一個使用'URL#openConnection()',另一個使用'HttpClient#execute()'。擺脫'URL#openConnection()'行並繼續使用'HttpClient'。 'HttpResponse'類有一個'getHeaders()'方法。使用它來獲取「Content-Type」標題。 – BalusC 2010-07-01 14:43:51