Android HTTPUrlConnection : how to set post data in http body?

AndroidHttpurlconnectionPostdata

Android Problem Overview


I've already created my HTTPUrlConnection :

String postData = "x=val1&y=val2";
URL url = new URL(strURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("Set-Cookie", sessionCookie);
conn.setRequestProperty("Content-Length", "" + Integer.toString(postData.getBytes().length));

// How to add postData as http body?

conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);

I don't know how to set postData in http body. How to do so? Would I better use HttpPost instead?

Thanks for your help.

Android Solutions


Solution 1 - Android

If you want to send String only try this way:

String str =  "some string goes here";
byte[] outputInBytes = str.getBytes("UTF-8");
OutputStream os = conn.getOutputStream();
os.write( outputInBytes );    
os.close();

But if you want to send as Json change Content type to:

conn.setRequestProperty("Content-Type","application/json");  

and now our str we can write:

String str =  "{\"x\": \"val1\",\"y\":\"val2\"}";

Hope it will help,

Solution 2 - Android

Guruparan's link in the comment above gives a really nice answer to this question. I highly recommend looking at it. Here is the principle that makes his solution work:

From what I understand, the HttpURLConnection represents the response body as an OutputStream. So you need to call something like:

get the connection's output stream

OutputStream op = conn.getOuputStream();

write the response body

op.write( [/*your string in bit form*/] );

close the output stream

op.close();

and then carry on your merry way with the connection (which you will still need to close).

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
QuestionRobView Question on Stackoverflow
Solution 1 - AndroidMaxim ShoustinView Answer on Stackoverflow
Solution 2 - AndroidPopulusTremuloidesView Answer on Stackoverflow