How to add parameters to HttpURLConnection using POST using NameValuePair
You can get output stream for the connection and write the parameter query string to it.
URL url = new URL("http://yoururl.com");HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setReadTimeout(10000);conn.setConnectTimeout(15000);conn.setRequestMethod("POST");conn.setDoInput(true);conn.setDoOutput(true);List<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("firstParam", paramValue1));params.add(new BasicNameValuePair("secondParam", paramValue2));params.add(new BasicNameValuePair("thirdParam", paramValue3));OutputStream os = conn.getOutputStream();BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, "UTF-8"));writer.write(getQuery(params));writer.flush();writer.close();os.close();conn.connect();
...
private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException{ StringBuilder result = new StringBuilder(); boolean first = true; for (NameValuePair pair : params) { if (first) first = false; else result.append("&"); result.append(URLEncoder.encode(pair.getName(), "UTF-8")); result.append("="); result.append(URLEncoder.encode(pair.getValue(), "UTF-8")); } return result.toString();}
Since the NameValuePair is deprecated. Thought of sharing my code
public String performPostCall(String requestURL, HashMap<String, String> postDataParams) { URL url; String response = ""; try { url = new URL(requestURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(15000); conn.setConnectTimeout(15000); conn.setRequestMethod("POST"); conn.setDoInput(true); conn.setDoOutput(true); OutputStream os = conn.getOutputStream(); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, "UTF-8")); writer.write(getPostDataString(postDataParams)); writer.flush(); writer.close(); os.close(); int responseCode=conn.getResponseCode(); if (responseCode == HttpsURLConnection.HTTP_OK) { String line; BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream())); while ((line=br.readLine()) != null) { response+=line; } } else { response=""; } } catch (Exception e) { e.printStackTrace(); } return response; }
....
private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException{ StringBuilder result = new StringBuilder(); boolean first = true; for(Map.Entry<String, String> entry : params.entrySet()){ if (first) first = false; else result.append("&"); result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); result.append("="); result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); } return result.toString(); }
If you don't need the ArrayList<NameValuePair>
for parameters, this is a shorter solution that builds the query string using the Uri.Builder
class:
URL url = new URL("http://yoururl.com");HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();conn.setReadTimeout(10000);conn.setConnectTimeout(15000);conn.setRequestMethod("POST");conn.setDoInput(true);conn.setDoOutput(true);Uri.Builder builder = new Uri.Builder() .appendQueryParameter("firstParam", paramValue1) .appendQueryParameter("secondParam", paramValue2) .appendQueryParameter("thirdParam", paramValue3);String query = builder.build().getEncodedQuery();OutputStream os = conn.getOutputStream();BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, "UTF-8"));writer.write(query);writer.flush();writer.close();os.close();conn.connect();