What exactly does URLConnection.setDoOutput() affect?

JavaAndroidUrlconnection

Java Problem Overview


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?

Java Solutions


Solution 1 - Java

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

Solution 2 - Java

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

Solution 3 - Java

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

Solution 4 - Java

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsharptoothView Question on Stackoverflow
Solution 1 - JavaThiloView Answer on Stackoverflow
Solution 2 - JavaPetar MinchevView Answer on Stackoverflow
Solution 3 - JavaSoloPilotView Answer on Stackoverflow
Solution 4 - JavaMithun SasidharanView Answer on Stackoverflow