仅下载HTML文档的一小部分

时间:2012-02-23 10:21:55

标签: android html http download

我考虑过实施一个从第三方网站下载数据的Android应用程序。该网站包含多个页面,每个页面仅包含大约200字节的有用数据和大约20千字节的数据,我不想使用这些页面。有没有办法只下载文档的那一部分?或者以某种方式过滤数据以最小化下载信息量?提前谢谢。

2 个答案:

答案 0 :(得分:2)

您需要Range HTTP请求标头,您可以使用该标头指定资源中的开始和结束包含字节地址。

Range: bytes=0-99

将检索第一个 100个字节,因为标头指定从第一个字节(在零偏移处)到第100个字节(在偏移99处)的区域。同样

Range: bytes=0-0

将检索第一个字节。


让它首先使用BBC网站,我知道它尊重Range标题。

use strict;
use warnings;

use LWP;

my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new('GET', 'http://www.bbc.co.uk/');
$req->header('Range', 'bytes=0-13');
my $resp = $ua->request($req);

print $resp->decoded_content;

这将返回页面<!DOCTYPE html的前十四个字节。

然后插入我们自己的网站。如果它仍然给你整个网站,那么你就没有了lukc而且你无法重述那些我害怕的回归。


让你只使用Perl版本是不公平的。这是Java

DefaultHttpClient client = new DefaultHttpClient();

HttpGet req = new HttpGet("http://www.bbc.co.uk/");
req.setHeader("Range", "bytes=0-13");
HttpResponse resp = client.execute(req);
HttpEntity ent = resp.getEntity();
String content = EntityUtils.toString(ent);

System.out.println(resp.getStatusLine());
System.out.println(ent.getContentLength());
System.out.println(content);    

输出

HTTP/1.1 206 Partial Content
14
<!DOCTYPE html

显示只读取了14个字节。将您的网址插入此处,看看它是否有效。

答案 1 :(得分:0)

如果网站总是非常相似,您可以使用skip(n) - InputStream方法跳过n个字节。