Что именно влияет на URLConnection.setDoOutput ()? - PullRequest
66 голосов
/ 21 декабря 2011

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

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

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

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

Ответы [ 4 ]

84 голосов
/ 21 декабря 2011

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

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

conn.getOutputStream().write(someBytes);
24 голосов
/ 21 декабря 2011

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

1 голос
/ 10 февраля 2016

Добавление комментария, если у вас длительное соединение, и вы отправляете как 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
0 голосов
/ 21 декабря 2011
public void setDoOutput( boolean dooutput )

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

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

...