본문 바로가기
프로그래밍/DB/JAVA/안드로이드/GAE

[안드로이드] HttpsURLConnection을 이용한 https 통신

by 아유카와 2012. 12. 18.

원출처는 잘 모르겠지만 응용해보자.



public class Test extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) 

    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        StringBuilder content = new StringBuilder();

        

        try

        {

            String data = "userid=???&password=???";

            URL url = new URL("https://url~~");

            

            HttpURLConnection http = null;

            

            if (url.getProtocol().toLowerCase().equals("https")) {

                trustAllHosts();

                HttpsURLConnection https = (HttpsURLConnection) url.openConnection();

                https.setHostnameVerifier(DO_NOT_VERIFY);

                http = https;

            } else {

                http = (HttpURLConnection) url.openConnection();

            }

            http.setDoOutput(true);

            OutputStreamWriter wr = new OutputStreamWriter(http.getOutputStream());

            wr.write(data);

            wr.flush();

            

            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(http.getInputStream()));


            String line;


            while ((line = bufferedReader.readLine()) != null)

            {

              content.append(line + "\n");

            }

            Log.i("content", content.toString());

            wr.close();

            bufferedReader.close();

        }

        catch(Exception e)

        {

        }

    }

    

    private static void trustAllHosts() {

        // Create a trust manager that does not validate certificate chains

        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {

                public java.security.cert.X509Certificate[] getAcceptedIssuers() {

                        return new java.security.cert.X509Certificate[] {};

                }


                @Override

                public void checkClientTrusted(

                        java.security.cert.X509Certificate[] chain,

                        String authType)

                        throws java.security.cert.CertificateException {

                    // TODO Auto-generated method stub

                    

                }


                @Override

                public void checkServerTrusted(

                        java.security.cert.X509Certificate[] chain,

                        String authType)

                        throws java.security.cert.CertificateException {

                    // TODO Auto-generated method stub

                    

                }

        } };


        // Install the all-trusting trust manager

        try {

                SSLContext sc = SSLContext.getInstance("TLS");

                sc.init(null, trustAllCerts, new java.security.SecureRandom());

                HttpsURLConnection

                                .setDefaultSSLSocketFactory(sc.getSocketFactory());

        } catch (Exception e) {

                e.printStackTrace();

        }

    }

    

    final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {

        @Override

        public boolean verify(String hostname, SSLSession session) {

            return true;

        }

    };

}