我正在下载一个网页,然后使用正则表达式从中提取一些数据(不要对我大喊大叫,我知道合适的解析器会更好,但这是一个非常简单的机器生成页面)。这在模拟器中运行良好,在通过 wi-fi 连接时在我的手机上运行良好,但在 3G 上运行不正常 - 返回的字符串不相同,而且我没有得到匹配项。我可以想象它与数据包大小或延迟有关,但我无法弄清楚。
我的代码:
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 注释。 Android 在 3G 上以不同方式获取页面以减小文件大小吗?
最佳答案
如果您使用 3g 或 wifi 访问网页,则不应更改 UserAgent (UA)。 如前所述,摆脱 UrlConnection,因为使用 HTTPClient 方法的代码显然是完整的,您可以使用以下方法设置 UA:
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, userAgent);
最后一个..它可能很傻,但网页可能是动态的?!这可能吗?
关于java - 使用 Android 下载网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3158498/