Secure HTTP Post in Android Secure HTTP Post in Android java java

Secure HTTP Post in Android


I'm not sure why you can't handle HTTPS. I wrote a helper class for my own applications and I am able to GET/POST to HTTPS without a problem. I will post the code here and perhaps you can see if there are differences between my code and yours.

import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLConnection;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.params.ClientPNames;import org.apache.http.client.params.CookiePolicy;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.BasicHttpParams;import org.apache.http.params.HttpConnectionParams;import org.apache.http.params.HttpParams;import org.apache.http.protocol.BasicHttpContext;import org.apache.http.protocol.HttpContext;import org.apache.http.util.EntityUtils;import org.json.JSONObject;import android.util.Log;public class HttpRequest{    DefaultHttpClient httpClient;    HttpContext localContext;    private String ret;    HttpResponse response = null;    HttpPost httpPost = null;    HttpGet httpGet = null;    public HttpRequest(){        HttpParams myParams = new BasicHttpParams();        HttpConnectionParams.setConnectionTimeout(myParams, 10000);        HttpConnectionParams.setSoTimeout(myParams, 10000);        httpClient = new DefaultHttpClient(myParams);               localContext = new BasicHttpContext();        }    public void clearCookies() {        httpClient.getCookieStore().clear();    }    public void abort() {        try {            if (httpClient != null) {                System.out.println("Abort.");                httpPost.abort();            }        } catch (Exception e) {            System.out.println("Your App Name Here" + e);        }    }    public String sendPost(String url, String data) {        return sendPost(url, data, null);    }    public String sendJSONPost(String url, JSONObject data) {        return sendPost(url, data.toString(), "application/json");    }    public String sendPost(String url, String data, String contentType) {        ret = null;        httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);        httpPost = new HttpPost(url);        response = null;        StringEntity tmp = null;                Log.d("Your App Name Here", "Setting httpPost headers");        httpPost.setHeader("User-Agent", "SET YOUR USER AGENT STRING HERE");        httpPost.setHeader("Accept", "text/html,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");        if (contentType != null) {            httpPost.setHeader("Content-Type", contentType);        } else {            httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");        }        try {            tmp = new StringEntity(data,"UTF-8");        } catch (UnsupportedEncodingException e) {            Log.e("Your App Name Here", "HttpUtils : UnsupportedEncodingException : "+e);        }        httpPost.setEntity(tmp);        Log.d("Your App Name Here", url + "?" + data);        try {            response = httpClient.execute(httpPost,localContext);            if (response != null) {                ret = EntityUtils.toString(response.getEntity());            }        } catch (Exception e) {            Log.e("Your App Name Here", "HttpUtils: " + e);        }        Log.d("Your App Name Here", "Returning value:" + ret);        return ret;    }    public String sendGet(String url) {        httpGet = new HttpGet(url);          try {            response = httpClient.execute(httpGet);          } catch (Exception e) {            Log.e("Your App Name Here", e.getMessage());        }        //int status = response.getStatusLine().getStatusCode();          // we assume that the response body contains the error message          try {            ret = EntityUtils.toString(response.getEntity());          } catch (IOException e) {            Log.e("Your App Name Here", e.getMessage());        }        return ret;    }    public InputStream getHttpStream(String urlString) throws IOException {        InputStream in = null;        int response = -1;        URL url = new URL(urlString);         URLConnection conn = url.openConnection();        if (!(conn instanceof HttpURLConnection))                                 throw new IOException("Not an HTTP connection");        try{            HttpURLConnection httpConn = (HttpURLConnection) conn;            httpConn.setAllowUserInteraction(false);            httpConn.setInstanceFollowRedirects(true);            httpConn.setRequestMethod("GET");            httpConn.connect();             response = httpConn.getResponseCode();                             if (response == HttpURLConnection.HTTP_OK) {                in = httpConn.getInputStream();                                             }                             } catch (Exception e) {            throw new IOException("Error connecting");                    } // end try-catch        return in;         }}


As some of the methods are deprecated, should'nt it be like this?

  private DefaultHttpClient createHttpClient() {    HttpParams params = new BasicHttpParams();    HttpConnectionParams.setConnectionTimeout(params, 10000);    HttpConnectionParams.setSoTimeout(params, 10000);    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);    HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);    HttpProtocolParams.setUseExpectContinue(params, true);    SchemeRegistry schReg = new SchemeRegistry();    schReg.register(new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));    schReg.register(new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));    ClientConnectionManager conMgr = new PoolingClientConnectionManager(schReg);    return new DefaultHttpClient(conMgr, params);  }

Should I change anything else, like HttpVersion?