Co dokładnie robi URLConnection.setdooutput () wpływa?

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

Ustaw flagę DoOutput na true, jeśli chcesz użyć połączenia URL do wyjścia, false, jeśli nie.

Teraz mam do czynienia z dokładnie z tym problemem - Java runtime konwertuje żądanie na POST po wywołaniu setDoOutput(true), a serwer odpowiada tylko na GET żądania. Chcę zrozumieć, co się stanie, jeśli usunę to setDoOutput(true) z kodu.

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

Author: sharptooth, 2011-12-21

4 answers

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

Wysłanie samego ciała żądania odbywa się poprzez strumień wyjściowy połączenia:

conn.getOutputStream().write(someBytes);
 81
Author: Thilo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-21 09:59:53

setDoOutput(true) jest używany dla żądań POST i PUT. Jeśli jest to false, to służy do używania żądań GET.

 24
Author: Petar Minchev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-21 10:01:07

Dodawanie komentarza, jeśli masz długotrwałe połączenie i wysyłasz zarówno Gety, jak i posty, to właśnie 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");
}

I aby uniknąć długotrwałego połączenia, zamknij je za każdym razem.

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

con.connect();              // force connect request
 1
Author: SoloPilot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-10 15:44:18
public void setDoOutput( boolean dooutput )

Pobiera wartość jako parametr i ustawia tę wartość pola doOutput dla tego URLConnection na określoną wartość.

Połączenie URL może być użyte do wejścia i / lub wyjścia. Ustaw flagę DoOutput na true, jeśli chcesz użyć połączenia URL do wyjścia, false, jeśli nie. Wartość domyślna to false.

 0
Author: Mithun Sasidharan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-21 09:56:52