0

我正在尝试编写一个 java 程序,它会自动下载并命名一些我最喜欢的网络漫画。由于我将从同一个域请求多个对象,因此我希望有一个持久的 http 连接,我可以保持打开状态,直到所有漫画都下载完毕。下面是我正在进行的工作。如何在不打开新的 http 连接的情况下从同一个域但不同的路径发出另一个请求?

import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL

public class ComicDownloader
{
    public static void main(String[] args)
    {
        URL url = null;
        HttpURLConnection httpc = null;
        BufferedReader input = null;

        try
        {
            url = new URL("http://www.cad-comic.com/cad/archive/2002");
            httpc = (HttpURLConnection) url.openConnection();
            input = new BufferedReader(new InputStreamReader(httpc.getInputStream()));
            String inputLine;

            while ((inputLine = input.readLine()) != null)
            {
                System.out.println(inputLine);
            }

            input.close();
            httpc.disconnect();
        }
        catch (IOException ex)
        {
            System.out.println(ex);
        }
    }
}
4

4 回答 4

4

只要 HTTP 服务器支持 keep-alive,HttpURLConnection 的实现就会缓存底层的 TCP 连接并为您透明地执行此操作。

于 2012-05-11T11:36:58.860 回答
1

对 HTTP keep-Alive 的支持是透明的。但是,它可以通过系统属性http.keepAlivehttp.maxConnections以及 HTTP/1.1 指定的请求和响应标头来控制。

控制 Keep-Alive 行为的系统属性是:

http.keepAlive=(boolean) 默认值:true

指示是否应支持保持活动(持久)连接。

http.maxConnections=(int) 默认值:5

指示每个目标在任何给定时间保持活动的最大连接数

取自:持久连接

于 2014-08-08T11:47:07.867 回答
0

HTTP 连接是无状态的,因此您请求的每个新图像都将是一个新 URL,因此也是一个新连接。

于 2012-05-11T11:26:57.290 回答
0

要利用 java 持久 Http 连接,您不应关闭HttpURLConnection(在您的情况下为 httpc),而只需关闭输入流,就像从流中读取所有数据或关闭它一样。Java 将清除 Socket 连接并使其可供重用。
根据 jdk,它使用缓存机制来重用相同的 TCP 连接。调用disconnect()不应该暗示这个HttpURLConnection实例可以被其他请求重用。

于 2018-02-07T10:11:33.730 回答