2010-03-16 48 views
14

Tôi làm cách nào để thực hiện một số yêu cầu trong một HttpURLConnection với Java?một số yêu cầu từ một 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 

Cảm ơn.

Trả lời

15

Từ Javadoc:

Mỗi dụ HttpURLConnection được sử dụng để thực hiện một yêu cầu duy nhất.

Đối tượng dường như không được sử dụng lại.

Ngoài bộ nhớ nhỏ và không hiệu quả, không có vấn đề gì lớn khi mở một HttpURLConnection cho mọi yêu cầu bạn muốn thực hiện. Nếu bạn muốn IO mạng hiệu quả trên một quy mô lớn hơn, tuy nhiên, bạn nên sử dụng một thư viện chuyên biệt như Apache HttpClient.

+2

Tôi sắp sửa nói điều tương tự, về việc không được sử dụng lại –

+0

Có +1, sau đó! Thông thường tôi đau khổ quá lâu so với câu trả lời của tôi rằng tất cả mọi người đánh bại tôi với nó. :) –

+0

@CarlSmotricz có thể đúng, ... nhưng trong trường hợp của tôi, tôi nhận được nhiều yêu cầu, quá nhiều mà không có tham số get/post + 1 với tham số, .... Tôi đã sử dụng mã đơn giản chỉ cho httpconnection. http://stackoverflow.com/questions/23017813/httpurlconnection-lots-of-requests – Bhuro

3

Ngoài câu trả lời đúng, có thể những gì bạn thực sự muốn sử dụng lại kết nối TCP cơ bản, còn gọi là "kết nối liên tục", được hỗ trợ bởi HttpURLConnection của JDK. Vì vậy, bạn không cần sử dụng các thư viện http khác vì lý do đó; mặc dù có lý do chính đáng khác, có thể là hiệu suất (nhưng không nhất thiết, phụ thuộc vào trường hợp sử dụng, thư viện).

+0

Cảm ơn, nhưng tôi đã thực hiện nó với một số thư viện phần thứ ba. –

+0

@StaxMan, tôi xin lỗi, nhưng bạn có thể đưa ra ví dụ về việc triển khai "kết nối liên tục" với HttpURLConnection không? Có thể bất kỳ liên kết hoặc đoạn mã nào không? – Ksenia

+1

@Ksenia không có gì để làm ở đó - nó được sử dụng tự động. Nó trong suốt; kết nối TCP mới chỉ được mở nếu cần thiết; hiện có một giữ mở cho một số lượng thời gian (30 giây? có một số mặc định JDK), đóng cửa nếu nhàn rỗi quá lâu. Vì vậy, cặp yêu cầu/phản hồi http LOGICAL của bạn có thể sử dụng cùng một kết nối TCP vật lý như một yêu cầu/phản hồi http đã hoàn thành trước đó. – StaxMan

Các vấn đề liên quan