Persistent HttpURLConnection in Java

2022-09-02 04:03:41

我正在尝试编写一个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);
        }
    }
}

答案 1

根据这里的文档,HTTP持久性在Java中是透明处理的,尽管它为您提供了通过系统和系统属性来控制它的选项。http.keepAlivehttp.maxConnections

然而

当前实现不会缓冲响应正文。这意味着应用程序必须完成读取响应正文或调用 close() 以放弃响应正文的其余部分,以便重用该连接。此外,当前实现在清理连接时不会尝试块读取,这意味着如果整个响应正文不可用,则不会重用该连接。

看看链接,看看它是否真的对你有帮助。


答案 2

根据此链接 http://docs.oracle.com/javase/6/docs/technotes/guides/net/http-keepalive.html,默认情况下启用HTTP连接重用,您可以使用Wireshark检查客户端和服务器之间的交互。第一个请求包含TCP和SSL握手(如果您的请求是https),在保持活动状态时间内触发的后续请求不包含TCP和SSL握手,仅包含应用程序数据传输。


推荐