На що саме впливає 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

Що робити, якщо я завантажую зображення?
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

0
public void setDoOutput( boolean dooutput )

Він приймає значення як параметр і встановлює це значення doOutputполя для цього URLConnection до вказаного значення.

Для введення та / або виводу може використовуватися URL-зв’язок. Встановіть прапорець DoOutput на true, якщо ви збираєтеся використовувати URL-зв’язок для виводу, false, якщо ні. За замовчуванням значення false.


3
Я прочитав це в документації, перш ніж запитувати. Причина, по якій я запитую, полягає в тому, що я не маю на увазі цих наслідків.
гострий зуб

Якщо ви хочете написати в об'єкт підключення, вам потрібно встановити значення serDoOutput істинним
Мітхун Сасідхаран
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.