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