HttpClient从响应中获取图像

时间:2014-10-19 12:51:13

标签: java apache-httpclient-4.x

我使用Apache HttpClient执行GET / POST请求,

我想知道你是否可以保存响应加载/检索的图像,而不必再用它们的URL下载它们。

这个问题就像一年前一样被问过,但没有人回答: Can I get cached images using HttpClient?

我试过了:

CloseableHttpClient httpclient = HttpClients.createDefault();

HttpGet httpget = new HttpGet(url);

HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();

InputStream is = entity.getContent();

FileOutputStream fos = new FileOutputStream(new File("img.png"));
int inByte;
while ((inByte = is.read()) != -1) {
    fos.write(inByte);
}
is.close();
fos.close();

但显然它只下载了文字,我可以HttpClient下载该特定网址的图片吗? 这是否可行?

1 个答案:

答案 0 :(得分:0)

网页只是网页的HTML代码。

当浏览器访问网页时,它会下载HTML代码,然后解析HTML 。如果有IMG标签,嵌入对象(如Flash,Applet等),框架等,浏览器会获取其URL,并创建一个新的HTTP连接,在该连接中下载图像。它适用于每个图像。然后,让页面的所有各个部分都准备就绪(在缓存中),它呈现页面。

这是一个简化的描述,当然,因为浏览器倾向于通过保持连接打开并保持缓存来优化这些事情。重申一下,要在页面中获取图像:

  1. 从给定网址下载HTML。
  2. 解析HTML并找到IMG标记。
  3. 对于每个相关的IMG,请从与其关联的SRC URL下载图像数据。您应该将它们保存到文件中。
  4. 重要的是要了解HttpClient响应只代表一个对象 - HTML页面或单个图像,具体取决于您提供的URL。如果您要下载整个页面及其所有图像,则必须自己为每个对象使用HttpClient - 它不会自动执行此操作。