HttpClient的得到响应
问题描述:
图片我使用Apache的HttpClient执行GET/POST请求,HttpClient的得到响应
我在想,如果你可以节省通过加载的响应/检索,图像,而无需与他们的网址重新下载。
这个问题已经被问像一年前,但没有人回答: 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
下载图片不是特定的URL? 这是否可行?
答
网页只是页面的HTML代码。
当浏览器访问网页时,它下载HTML代码,然后解析HTML。如果存在诸如IMG
标签,嵌入对象(如Flash,Applets等),框架等等,浏览器将获取它们的URL并创建一个新的HTTP连接,并在其中下载图像。它为每个图像都这样做。然后,将页面的各个部分都准备好(缓存中),然后呈现页面。
这是一个简化的描述,当然,浏览器倾向于通过保持连接打开并保持缓存来优化这些事情。所以要重申,要在一个页面中获取图像:
- 从给定的URL下载HTML。
- 解析HTML并找到IMG标签。
- 对于每个相关的IMG,从与其关联的SRC URL下载图像数据。你应该将它们保存到一个文件中。
重要的是要明白,HttpClient
响应只表示一个对象 - HTML页面或单个图像,具体取决于您提供的URL。如果您要下载整个页面及其所有图像,则必须为每个对象自己使用HttpClient
- 它不会自动执行。
好吧,我明白了,但让我们以一个验证码为例,当你单独下载图像时,你会得到一个新的图像,对吧? – 2014-10-19 13:09:15
是的。但是你看,你甚至没有下载过它。直到您访问其直接网址时才会生成。一旦你用'HttpClient'完成了,你可以把它保存在一个文件中,如果你愿意,可以不再访问它。 – RealSkeptic 2014-10-19 13:14:15
好的,谢谢,我会试试看。 – 2014-10-19 13:18:14