Make an HTTP request with android Make an HTTP request with android android android

Make an HTTP request with android


UPDATE

This is a very old answer. I definitely won't recommend Apache's client anymore. Instead use either:

Original Answer

First of all, request a permission to access network, add following to your manifest:

<uses-permission android:name="android.permission.INTERNET" />

Then the easiest way is to use Apache http client bundled with Android:

    HttpClient httpclient = new DefaultHttpClient();    HttpResponse response = httpclient.execute(new HttpGet(URL));    StatusLine statusLine = response.getStatusLine();    if(statusLine.getStatusCode() == HttpStatus.SC_OK){        ByteArrayOutputStream out = new ByteArrayOutputStream();        response.getEntity().writeTo(out);        String responseString = out.toString();        out.close();        //..more logic    } else{        //Closes the connection.        response.getEntity().getContent().close();        throw new IOException(statusLine.getReasonPhrase());    }

If you want it to run on separate thread I'd recommend extending AsyncTask:

class RequestTask extends AsyncTask<String, String, String>{    @Override    protected String doInBackground(String... uri) {        HttpClient httpclient = new DefaultHttpClient();        HttpResponse response;        String responseString = null;        try {            response = httpclient.execute(new HttpGet(uri[0]));            StatusLine statusLine = response.getStatusLine();            if(statusLine.getStatusCode() == HttpStatus.SC_OK){                ByteArrayOutputStream out = new ByteArrayOutputStream();                response.getEntity().writeTo(out);                responseString = out.toString();                out.close();            } else{                //Closes the connection.                response.getEntity().getContent().close();                throw new IOException(statusLine.getReasonPhrase());            }        } catch (ClientProtocolException e) {            //TODO Handle problems..        } catch (IOException e) {            //TODO Handle problems..        }        return responseString;    }        @Override    protected void onPostExecute(String result) {        super.onPostExecute(result);        //Do anything with response..    }}

You then can make a request by:

   new RequestTask().execute("http://stackoverflow.com");


unless you have an explicit reason to choose the Apache HttpClient, you should prefer java.net.URLConnection. you can find plenty of examples of how to use it on the web.

we've also improved the Android documentation since your original post: http://developer.android.com/reference/java/net/HttpURLConnection.html

and we've talked about the trade-offs on the official blog: http://android-developers.blogspot.com/2011/09/androids-http-clients.html


Note: The Apache HTTP Client bundled with Android is now deprecated in favor of HttpURLConnection. Please see the Android Developers Blog for more details.

Add <uses-permission android:name="android.permission.INTERNET" /> to your manifest.

You would then retrieve a web page like so:

URL url = new URL("http://www.android.com/");HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();try {     InputStream in = new BufferedInputStream(urlConnection.getInputStream());     readStream(in);}finally {     urlConnection.disconnect();}

I also suggest running it on a separate thread:

class RequestTask extends AsyncTask<String, String, String>{@Overrideprotected String doInBackground(String... uri) {    String responseString = null;    try {        URL url = new URL(myurl);        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        if(conn.getResponseCode() == HttpsURLConnection.HTTP_OK){            // Do normal input or output stream reading        }        else {            response = "FAILED"; // See documentation for more info on response handling        }    } catch (ClientProtocolException e) {        //TODO Handle problems..    } catch (IOException e) {        //TODO Handle problems..    }    return responseString;}@Overrideprotected void onPostExecute(String result) {    super.onPostExecute(result);    //Do anything with response..}}

See the documentation for more information on response handling and POST requests.