2010-03-16 95 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

相關問題