Что именно делает URLConnection.setDoOutput() влияет?

здесь setDoOutput() на URLConnection. Согласно документация я должен

установите флаг DoOutput в true, если вы собираетесь использовать URL-соединение для вывода, false, если нет.

теперь я стою перед именно эта проблема - среда выполнения Java преобразует запрос в POST после setDoOutput(true) вызывается, и сервер отвечает только на GET запросы. Я хочу понять, что произойдет, если я удалить setDoOutput(true) от код.

на что именно это повлияет? Предположим, я установлю его в false - что я могу сделать сейчас и что я могу сделать сейчас? Смогу ли я выступить GET запросы? Что такое "выход" в контексте этого метода?

4 ответов


Если вы хотите отправить (выход) тело запроса, например, с запросами POST или PUT. С GET вы обычно не отправляете тело, поэтому оно вам не нужно.

отправка самого тела запроса выполняется через выходной поток соединения:

conn.getOutputStream().write(someBytes);

setDoOutput(true) используется POST и PUT запросы. Если это false затем используется GET запросы.


добавление комментария, если у вас есть длительное соединение, и вы отправляете как Get, так и POSTs, это то, что я делаю:

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

и во избежание сделать соединение продолжительным, закройте его каждый раз.

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

con.connect();              // force connect request

public void setDoOutput( boolean dooutput )

принимает значение в качестве параметра, и задает значение