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

80

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

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

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

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

острый зуб
источник

Ответы:

96

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

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

conn.getOutputStream().write(someBytes);
Тило
источник
Что делать, если я загружаю изображение?
Jaydev
Скачивание? Или загрузка?
Тило
27

setDoOutput(true)используется для POSTи PUTзапросов. Если это так, falseто это для использования GETзапросов.

Петр Минчев
источник
2
хорошо, как я могу заставить это соединение выполнять PUT, поскольку сервер на другой стороне принимает только запросы PUT, а не POST ...?
ante.sabo 05
Что делать, если я загружаю изображение?
Jaydev
1

Добавляя комментарий, если у вас длительное соединение и вы отправляете как GET, так и POST, я делаю следующее:

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
SoloPilot
источник
0
public void setDoOutput( boolean dooutput )

Он принимает значение в качестве параметра и устанавливает это значение doOutputполя для этого URLConnection на указанное значение.

URL-соединение может использоваться для ввода и / или вывода. Установите для флага DoOutput значение true, если вы собираетесь использовать соединение URL для вывода, и false, если нет. По умолчанию - false.

Митхун Сасидхаран
источник
3
Я прочитал это в документации, прежде чем спрашивать. Причина, по которой я спрашиваю, в том, что я не понимаю их последствий.
Sharptooth
Если вы хотите писать в объект подключения, вы должны установить для serDoOutput значение true
Митхун Сасидхаран