Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android, Java: HTTP POST Request

I have to do a http post request to a web-service for authenticating the user with username and password. The Web-service guy gave me following information to construct HTTP Post request.

POST /login/dologin HTTP/1.1 Host: webservice.companyname.com Content-Type: application/x-www-form-urlencoded Content-Length: 48  id=username&num=password&remember=on&output=xml 

The XML Response that i will be getting is

<?xml version="1.0" encoding="ISO-8859-1"?> <login>  <message><![CDATA[]]></message>  <status><![CDATA[true]]></status>  <Rlo><![CDATA[Username]]></Rlo>  <Rsc><![CDATA[9L99PK1KGKSkfMbcsxvkF0S0UoldJ0SU]]></Rsc>  <Rm><![CDATA[b59031b85bb127661105765722cd3531==AO1YjN5QDM5ITM]]></Rm>  <Rl><![CDATA[[email protected]]]></Rl>  <uid><![CDATA[3539145]]></uid>  <Rmu><![CDATA[f8e8917f7964d4cc7c4c4226f060e3ea]]></Rmu> </login> 

This is what i am doing HttpPost postRequest = new HttpPost(urlString); How do i construct the rest of the parameters?

like image 524
Faheem Kalsekar Avatar asked Dec 28 '10 05:12

Faheem Kalsekar


2 Answers

Here's an example previously found at androidsnippets.com (the site is currently not maintained anymore).

// Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://www.yoursite.com/script.php");  try {     // Add your data     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);     nameValuePairs.add(new BasicNameValuePair("id", "12345"));     nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!"));     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));      // Execute HTTP Post Request     HttpResponse response = httpclient.execute(httppost);  } catch (ClientProtocolException e) {     // TODO Auto-generated catch block } catch (IOException e) {     // TODO Auto-generated catch block } 

So, you can add your parameters as BasicNameValuePair.

An alternative is to use (Http)URLConnection. See also Using java.net.URLConnection to fire and handle HTTP requests. This is actually the preferred method in newer Android versions (Gingerbread+). See also this blog, this developer doc and Android's HttpURLConnection javadoc.

like image 98
BalusC Avatar answered Sep 29 '22 20:09

BalusC


to @BalusC answer I would add how to convert the response in a String:

HttpResponse response = client.execute(request); HttpEntity entity = response.getEntity(); if (entity != null) {     InputStream instream = entity.getContent();      String result = RestClient.convertStreamToString(instream);     Log.i("Read from server", result); } 

Here is an example of convertStramToString.

like image 31
Rudolf Real Avatar answered Sep 29 '22 21:09

Rudolf Real