50

I have been trying long to send an HttpPost request and retrieve response but even though I was able to make a connection I don't yet get how to get the string message which is returned by the request-response

 HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://www.myurl.com/app/page.php"); // Add your data List < NameValuePair > nameValuePairs = new ArrayList < NameValuePair > (5); nameValuePairs.add(new BasicNameValuePair("type", "20")); nameValuePairs.add(new BasicNameValuePair("mob", "919895865899")); nameValuePairs.add(new BasicNameValuePair("pack", "0")); nameValuePairs.add(new BasicNameValuePair("exchk", "1")); try { httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); Log.d("myapp", "works till here. 2"); try { HttpResponse response = httpclient.execute(httppost); Log.d("myapp", "response " + response.getEntity()); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } 

I'm sorry, I sound very naive because I'm new to java. Please help me.

3
  • Hi, I came across this post, and I was wondering if you can tell me why your ArrayList is (5) and not (4)? Commented May 15, 2012 at 6:06
  • I removed one Params before posting it here and just forgot to change the array list. Commented Jul 13, 2012 at 9:19
  • 2
    "HttpClient", "HttpPost", "HttpResponse", "HttpEntity", "EntityUtils", "NameValuePair", "BasicNameValuePair" are Deprecated. Please suggest another solution. Commented May 19, 2015 at 10:54

5 Answers 5

99

Try to use the EntityUtil on your response:

String responseBody = EntityUtils.toString(response.getEntity()); 
Sign up to request clarification or add additional context in comments.

4 Comments

Hi Soulreaper, Thanks for your response . But why is EntityUtils used ?
It is just a convenient way to extract the contained raw byte answer into string form.
Starting from API level 22, EntityUtils is deprecated. As is the whole org.apache.http package.
@Moritz: what is the name of parameters that we send to server. i mean is it "id" of textbox that i fill or "name" of it? Thanks.
8
 URL url; url = new URL("http://www.url.com/app.php"); URLConnection connection; connection = url.openConnection(); HttpURLConnection httppost = (HttpURLConnection) connection; httppost.setDoInput(true); httppost.setDoOutput(true); httppost.setRequestMethod("POST"); httppost.setRequestProperty("User-Agent", "Tranz-Version-t1.914"); httppost.setRequestProperty("Accept_Language", "en-US"); httppost.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); DataOutputStream dos = new DataOutputStream(httppost.getOutputStream()); dos.write(b); // bytes[] b of post data String reply; InputStream in = httppost.getInputStream(); StringBuffer sb = new StringBuffer(); try { int chr; while ((chr = in.read()) != -1) { sb.append((char) chr); } reply = sb.toString(); } finally { in.close(); } 

This code snippet works. I got it after along search , but from a J2ME code.

3 Comments

where did you added the values to be sent with the url?
httppost.setRequestProperty("parameter_variable_name",value) - I guess this would work. Sorry been since a while I have tried anything similar. Couldn't recollect well.
Just telling, that this snipset is outdated for ages and there is another way to run httpost requests.
7

You can call execute method with a ResponseHandler. Here's an example:

ResponseHandler<String> responseHandler = new BasicResponseHandler(); String response = httpClient.execute(httppost, responseHandler); 

1 Comment

Hi Sarp, Thanks for your response . But, what is the advantage of using this ?
4

You can do this by this way :

 public class MyHttpPostProjectActivity extends Activity implements OnClickListener { private EditText usernameEditText; private EditText passwordEditText; private Button sendPostReqButton; private Button clearButton; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login); usernameEditText = (EditText) findViewById(R.id.login_username_editText); passwordEditText = (EditText) findViewById(R.id.login_password_editText); sendPostReqButton = (Button) findViewById(R.id.login_sendPostReq_button); sendPostReqButton.setOnClickListener(this); clearButton = (Button) findViewById(R.id.login_clear_button); clearButton.setOnClickListener(this); } @Override public void onClick(View v) { if(v.getId() == R.id.login_clear_button){ usernameEditText.setText(""); passwordEditText.setText(""); passwordEditText.setCursorVisible(false); passwordEditText.setFocusable(false); usernameEditText.setCursorVisible(true); passwordEditText.setFocusable(true); }else if(v.getId() == R.id.login_sendPostReq_button){ String givenUsername = usernameEditText.getEditableText().toString(); String givenPassword = passwordEditText.getEditableText().toString(); System.out.println("Given username :" + givenUsername + " Given password :" + givenPassword); sendPostRequest(givenUsername, givenPassword); } } private void sendPostRequest(String givenUsername, String givenPassword) { class SendPostReqAsyncTask extends AsyncTask<String, Void, String>{ @Override protected String doInBackground(String... params) { String paramUsername = params[0]; String paramPassword = params[1]; System.out.println("*** doInBackground ** paramUsername " + paramUsername + " paramPassword :" + paramPassword); HttpClient httpClient = new DefaultHttpClient(); // In a POST request, we don't pass the values in the URL. //Therefore we use only the web page URL as the parameter of the HttpPost argument HttpPost httpPost = new HttpPost("http://www.nirmana.lk/hec/android/postLogin.php"); // Because we are not passing values over the URL, we should have a mechanism to pass the values that can be //uniquely separate by the other end. //To achieve that we use BasicNameValuePair //Things we need to pass with the POST request BasicNameValuePair usernameBasicNameValuePair = new BasicNameValuePair("paramUsername", paramUsername); BasicNameValuePair passwordBasicNameValuePAir = new BasicNameValuePair("paramPassword", paramPassword); // We add the content that we want to pass with the POST request to as name-value pairs //Now we put those sending details to an ArrayList with type safe of NameValuePair List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>(); nameValuePairList.add(usernameBasicNameValuePair); nameValuePairList.add(passwordBasicNameValuePAir); try { // UrlEncodedFormEntity is an entity composed of a list of url-encoded pairs. //This is typically useful while sending an HTTP POST request. UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(nameValuePairList); // setEntity() hands the entity (here it is urlEncodedFormEntity) to the request. httpPost.setEntity(urlEncodedFormEntity); try { // HttpResponse is an interface just like HttpPost. //Therefore we can't initialize them HttpResponse httpResponse = httpClient.execute(httpPost); // According to the JAVA API, InputStream constructor do nothing. //So we can't initialize InputStream although it is not an interface InputStream inputStream = httpResponse.getEntity().getContent(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuilder stringBuilder = new StringBuilder(); String bufferedStrChunk = null; while((bufferedStrChunk = bufferedReader.readLine()) != null){ stringBuilder.append(bufferedStrChunk); } return stringBuilder.toString(); } catch (ClientProtocolException cpe) { System.out.println("First Exception caz of HttpResponese :" + cpe); cpe.printStackTrace(); } catch (IOException ioe) { System.out.println("Second Exception caz of HttpResponse :" + ioe); ioe.printStackTrace(); } } catch (UnsupportedEncodingException uee) { System.out.println("An Exception given because of UrlEncodedFormEntity argument :" + uee); uee.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); if(result.equals("working")){ Toast.makeText(getApplicationContext(), "HTTP POST is working...", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(getApplicationContext(), "Invalid POST req...", Toast.LENGTH_LONG).show(); } } } SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(); sendPostReqAsyncTask.execute(givenUsername, givenPassword); } } 

2 Comments

Hi Siddhpura, are you writing and reading at the same time? What should I do for just send the information? I try to do like you but it doesn't works for me. What part it's exactly for send the data with the POST method? Thank you!
@Siddhpura: what value i must put for name of parameters? i mean is it "id" of theparameter of it is "name"? please help me. thanks.
1

You should try using HttpGet instead of HttpPost. I had a similar problem and that solved it.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.