Na co dokładnie wpływa metoda URLConnection.setDoOutput ()?

80

Jest setDoOutput()w URLConnection. Zgodnie z dokumentacją powinienem

Ustaw flagę DoOutput na true, jeśli zamierzasz używać połączenia URL do danych wyjściowych, false, jeśli nie.

Teraz mam dokładnie ten problem - środowisko wykonawcze Java konwertuje żądanie na POSTraz setDoOutput(true)wywołane, a serwer odpowiada tylko na GETżądania. Chcę wiedzieć, co się stanie, jeśli usunę to setDoOutput(true)z kodu.

Na co to dokładnie wpłynie? Przypuśćmy, że ustawię to na false- co mogę zrobić teraz, a czego nie mogę teraz? Czy będę mógł wykonywać GETżądania? Co to jest „wynik” w kontekście tej metody?

ostry
źródło

Odpowiedzi:

96

Musisz ustawić ją na true, jeśli chcesz wysłać ( wyprowadzić ) treść żądania, na przykład z żądaniami POST lub PUT. Z GET zwykle nie wysyłasz ciała, więc go nie potrzebujesz.

Wysyłanie samej treści żądania odbywa się za pośrednictwem strumienia wyjściowego połączenia:

conn.getOutputStream().write(someBytes);
Thilo
źródło
A jeśli pobieram obraz?
Jaydev
Ściąganie? Lub przesyłasz?
Thilo
27

setDoOutput(true)jest używany do POSTi PUTżądań. Jeśli tak, falseto służy do korzystania z GETżądań.

Petar Minchev
źródło
2
ok, jak mogę wtedy zmusić to połączenie do wykonania PUT, skoro serwer po drugiej stronie akceptuje tylko żądania PUT, a nie POST ...?
ante.sabo
A jeśli pobieram obraz?
Jaydev
1

Dodając komentarz, jeśli masz długotrwałe połączenie i wysyłasz zarówno GET, jak i POST, oto co robię:

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");
}

Aby uniknąć długotrwałego połączenia, zamykaj je za każdym razem.

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

con.connect();              // force connect request
SoloPilot
źródło
0
public void setDoOutput( boolean dooutput )

Przyjmuje wartość jako parametr i ustawia tę wartość doOutputpola dla tego połączenia URL na określoną wartość.

Do wprowadzania i / lub wyprowadzania można użyć połączenia URL. Ustaw flagę DoOutput na true, jeśli zamierzasz używać połączenia URL do danych wyjściowych, false, jeśli nie. Wartość domyślna to false.

Mithun Sasidharan
źródło
3
Przeczytałem to w dokumentacji, zanim zapytałem. Pytam o to, że nie rozumiem ich konsekwencji.
ostry ząb
Jeśli chcesz pisać do obiektu połączenia, musisz ustawić serDoOutput na true
Mithun Sasidharan