Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpClient从响应获取图像_Java_Apache Httpclient 4.x - Fatal编程技术网

Java HttpClient从响应获取图像

Java HttpClient从响应获取图像,java,apache-httpclient-4.x,Java,Apache Httpclient 4.x,我正在使用Apache HttpClient执行GET/POST请求 我想知道您是否可以保存由响应加载/检索的图像,而不必再次下载它们的URL 一年前就有人问过这个问题,但没有人回答: 我试过: CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpget = new HttpGet(url); HttpResponse response = httpclient.execute(httpget)

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

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

一年前就有人问过这个问题,但没有人回答:

我试过:

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、applet等)、框架等,浏览器将获取它们的URL,并创建一个新的HTTP连接,在其中下载图像。它对每个图像都是这样。然后,在缓存中准备好页面的所有不同部分后,它呈现页面

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

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

好的,我明白了,但让我们以验证码为例,当您单独下载图像时,您会得到一个新图像,对吗?是的。但是你看,你连一次都没下载。直到您访问它的直接URL,它才会生成。一旦您使用HttpClient执行了此操作,您就可以将其保存到文件中,并且如果您愿意,就不再访问它。