2011-12-21 28 views
60

setDoOutput() trong URLConnection. Theo documentation Tôi nênURLConnection.setDoOutput() có ảnh hưởng gì đến chính xác?

Đặt cờ DoOutput thành true nếu bạn định sử dụng kết nối URL cho đầu ra, sai nếu không.

Bây giờ tôi đang phải đối mặt với exactly this problem - thời gian chạy Java chuyển đổi theo yêu cầu để POST lần setDoOutput(true) được gọi và máy chủ duy nhất đáp ứng yêu cầu GET. Tôi muốn hiểu điều gì sẽ xảy ra nếu tôi xóa số setDoOutput(true) khỏi mã.

Chính xác điều này sẽ ảnh hưởng đến điều gì? Giả sử tôi đặt nó là false - tôi có thể làm gì bây giờ và tôi không thể làm gì bây giờ? Tôi có thể thực hiện các yêu cầu GET không? "Đầu ra" trong ngữ cảnh của phương thức này là gì?

Trả lời

76

Bạn cần đặt thành đúng nếu bạn muốn gửi (đầu ra) một phần yêu cầu, ví dụ như yêu cầu POST hoặc PUT. Với GET, bạn thường không gửi một cơ thể, vì vậy bạn không cần nó.

Sending cơ thể yêu cầu bản thân được thực hiện thông qua dòng sản lượng của kết nối:

conn.getOutputStream().write(someBytes); 
+0

Nếu tôi đang tải xuống hình ảnh thì sao? – Jaydev

+0

Đang tải xuống? Hoặc tải lên? – Thilo

24

setDoOutput(true) được sử dụng cho các yêu cầu POSTPUT. Nếu đó là false thì đó là để sử dụng các yêu cầu GET.

+0

Cũng có thể cho PUT. – Thilo

+0

@Thilo - Tốt. –

+1

ok, làm thế nào tôi có thể buộc kết nối này để làm PUT vì máy chủ ở phía bên kia chỉ chấp nhận yêu cầu PUT, chứ không phải POST ...? –

0
public void setDoOutput(boolean dooutput) 

Giá trị này phải là giá trị và đặt giá trị này của trường doOutput cho URL nàyKết nối với giá trị được chỉ định.

Kết nối URL có thể được sử dụng cho đầu vào và/hoặc đầu ra. Đặt cờ DoOutput thành true nếu bạn định sử dụng kết nối URL cho đầu ra, false nếu không. Mặc định này sai.

+3

Tôi đã đọc trong tài liệu trước khi yêu cầu. Lý do tôi hỏi là tôi không hiểu được ý nghĩa của chúng. – sharptooth

+0

Nếu bạn muốn ghi vào một đối tượng kết nối bạn đã đặt để thiết lập serDoOutput true –

1

Thêm một lời nhận xét, nếu bạn có một kết nối lâu dài và bạn gửi cả GET và POST, đây là những gì tôi làm:

if (doGet) { // some boolean 
    con.setDoOutput(false); // reset any previous setting, if con is long lasting 
    con.setRequestMethod("GET"); 
} 
else { 
    con.setDoOutput(true); // reset any previous setting, if con is long lasting 
    con.setRequestMethod("POST"); 
} 

Và để tránh kết nối lâu dài, hãy đóng kết nối mỗi lần.

if (doClose) // some boolean 
    con.setRequestProperty("Connection", "close"); 

con.connect();    // force connect request 
Các vấn đề liên quan