What exactly does URLConnection.setDoOutput() affect?
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?
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);
setDoOutput(true)
is used for POST
and PUT
requests. If it is false
then it is for using GET
requests.
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