首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的持久化HttpURLConnection

Java中的持久化HttpURLConnection
EN

Stack Overflow用户
提问于 2010-07-22 05:28:06
回答 3查看 28.8K关注 0票数 20

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

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-22 05:40:28

根据documentation here的说法,HTTP持久化是在Java语言中透明地处理的,尽管它也为您提供了通过http.keepAlivehttp.maxConnections系统属性进行控制的选项。

然而,

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

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

票数 20
EN

Stack Overflow用户

发布于 2017-02-16 11:28:01

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

票数 5
EN

Stack Overflow用户

发布于 2021-03-12 20:32:26

即使HttpURLConnection在默认情况下启用了keep-alive,也不能保证HttpURLConnection对多个HTTP请求使用相同的连接。我在编写HTTPS客户端应用程序时遇到了类似的问题。通过使用SSLContext、SSLSocketFactory和HttpsURLConnection的单实例解决了这一问题。

代码语言:javascript
复制
public class MyHTTPClient {
    private SSLContext mSSLContext = null;
    private SSLSocketFactory mSSLSocketFactory = null;
    private HttpsURLConnection mConnection = null;

    public void init() {
        //Setup SSL context and Socket factory here
    }

    pubblic void sendRequest() {
        URL url = new URL("https://example.com/request_receiver");
        mConnection = (HttpsURLConnection) url.openConnection();
        mConnection.setSSLSocketFactory(mSSLSocketFactory);

        // Setup request property and send request
        // Open input stream to read response
        // Close output, input streams
        
        mConnection.disconnect();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3304006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档