2010-03-16 84 views
14

如何在一个HttpURLConnection中使用Java做几个请求?来自一个HttpURLConnection的几个请求

URL url = new URL("http://my.com"); 
HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
HttpURLConnection.setFollowRedirects(true); 
connection.setDoOutput(true); 
connection.setRequestMethod("GET"); 

PrintStream ps = new PrintStream(connection.getOutputStream()); 
ps.print(params); 
ps.close(); 
connection.connect(); 
//TODO: do next request with other url, but in same connection 

谢谢。

回答

15

从Javadoc中:

每个HttpURLConnection实例是用来制造单个请求。

该对象显然不意味着被重复使用。

除了一点点内存抖动和低效率之外,对于您想要创建的每个请求,打开一个HttpURLConnection都没有大问题。如果你想要更大规模的高效网络IO,你最好使用像Apache HttpClient这样的专用库。

+2

我正要说同样的事情,关于它并非意味着被重复使用 – 2010-03-16 19:53:24

+0

有+1,那么!通常我会在我的答案中痛苦很久,以至于每个人都打我。 :) – 2010-03-16 19:54:47

+0

@CarlSmotricz可能是真的,...但在我的情况下,我得到了许多请求,太多没有任何get/post参数+ 1与get参数,....我只使用简单的代码为httpconnection。 http://stackoverflow.com/questions/23017813/httpurlconnection-lots-of-requests – Bhuro 2016-07-16 10:47:54

3

除了正确的答案之外,也许你真正想要的是重用底层TCP连接,也就是JDK的HttpURLConnection支持的“持久连接”。所以你不需要使用其他的http库,虽然还有其他合法的原因,但可能性能(但不一定取决于用例,库)。

+0

谢谢,但我已经完成了一些第三方库。 – 2010-10-21 05:49:31

+0

@StaxMan,我很抱歉,但你能举出任何使用HttpURLConnection实现“永久连接”的例子吗?也许任何链接或代码片段? – Ksenia 2016-01-29 12:52:48

+1

@Ksenia这里没有什么可做的 - 它会自动使用。它是透明的;新的TCP连接只在必要时才打开;现有的一个保持打开一段时间(30秒?有一些JDK默认设置),如果闲置时间过长,则关闭。因此,您的LOGICAL http请求/响应对可以使用与先前完成的http请求/响应相同的PHYSICAL TCP连接。 – StaxMan 2016-01-29 22:41:41

相关问题