90

There's setDoOutput() in URLConnection. According to documentation I should

Set the DoOutput flag to true if you intend to use the URL connection for output, false if not.

Now I'm facing exactly this problem - the Java runtime converts the request to POST once setDoOutput(true) is called and the server only responds to GET requests. I want to understand what happens if I remove that setDoOutput(true) from the code.

What exactly will this affect? Suppose I set it to false - what can I do now and what can't I do now? Will I be able to perform GET requests? What is "output" in context of this method?

sharptooth
  • 163,328
  • 92
  • 501
  • 942

4 Answers4

109

You need to set it to true if you want to send (output) a request body, for example with POST or PUT requests. With GET, you do not usually send a body, so you do not need it.

Sending the request body itself is done via the connection's output stream:

conn.getOutputStream().write(someBytes);
Thilo
  • 250,062
  • 96
  • 490
  • 643
34

setDoOutput(true) is used for POST and PUT requests. If it is false then it is for using GET requests.

Petar Minchev
  • 45,963
  • 11
  • 102
  • 118
2

Adding a comment, if you have a long lasting connection and you send both GETs and POSTs, this is what I do:

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

And to avoid making the connection long lasting, close it each time.

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

con.connect();              // force connect request
SoloPilot
  • 1,429
  • 20
  • 17
0
public void setDoOutput( boolean dooutput )

It takes a value as the parameter and sets this value of the doOutput field for this URLConnection to the specified value.

A URL connection can be used for input and/or output. Set the DoOutput flag to true if you intend to use the URL connection for output, false if not. The default is false.

Mithun Sasidharan
  • 20,085
  • 10
  • 33
  • 52