java - 使用 Android 下载网页

标签 java android networking

我正在下载一个网页,然后使用正则表达式从中提取一些数据(不要对我大喊大叫,我知道合适的解析器会更好,但这是一个非常简单的机器生成页面)。这在模拟器中运行良好,在通过 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/

相关文章:

java - 抽屉式导航栏未显示

c# - 使用ZeroMQ通过Internet进行客户端/服务器通信

networking - Clojure:替代使用互斥锁/锁和计数器

java - 当变量仅通过 setter 获得一次时,如何使变量的行为最终化

java - 信息隐藏。什么时候是安全,什么时候是软件加权?

java - 自动检测 Java 是否存在并自动启动应用程序的 JAR 安装程序

java - 线程 "main"java.lang.SecurityException : Prohibited package name: java. sql 中的异常

android - NestedScrollView 具有约束布局不滚动

接受 unicode 的 Android IME

java - 如何使用Java中的objectinputstream多次从服务器读取文件