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?

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

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ń.


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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.