Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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.

like image 509
Rob Avatar asked Nov 16 '13 16:11

Rob


People also ask

How do you add parameters to HttpURLConnection post?

Here is some code to add query parameters into an HTTP request using Java: URL url = new URL("https://api.github.com/users/google"); HttpURLConnection con = (HttpURLConnection) url. openConnection(); con. setRequestMethod("POST"); con.

Can HttpURLConnection be used with https?

HttpsURLConnection extends HttpURLConnection , and your connection is an instance of both. When you call openConnection() the function actually returns an HttpsURLConnection . However, because the https object extends the http one, your connection is still an instance of an HttpURLConnection .


2 Answers

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,

like image 187
Maxim Shoustin Avatar answered Sep 19 '22 02:09

Maxim Shoustin


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

like image 20
PopulusTremuloides Avatar answered Sep 18 '22 02:09

PopulusTremuloides