본문 바로가기
  • 그냥 하자
Android

Android https post

by Mash 2012. 4. 16.
반응형

HTTPS url을 그냥 전송하면 단말기에 따라서는 전송이 실패할 수 있다. 귀찮더라도 확실하게 하려면 아래처럼...

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
 
// . . .
 
    // always verify the host - dont check for certificate
    final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                    return true;
            }
    };
 
    /**
     * Trust every server - don't check for any certificate
     */
    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(X509Certificate[] chain,
                    String authType) throws CertificateException {
            }
 
            @Override
            public void checkServerTrusted(X509Certificate[] chain,
                    String authType) throws CertificateException {
            }
        }};
 
        // 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();
        }
    }
 
    public static HttpsURLConnection postHttps(String url, int connTimeout, int readTimeout) {
        trustAllHosts();
 
        HttpsURLConnection https = null;
        try {
            https = (HttpsURLConnection) new URL(url).openConnection();
            https.setHostnameVerifier(DO_NOT_VERIFY);
            https.setConnectTimeout(connTimeout);
            https.setReadTimeout(readTimeout);
        } 
        catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } 
        catch (IOException e) {
            e.printStackTrace();
            return null;
        }
 
        return https;
    }

출처 :  http://sizuha.wikispaces.com/Android+HTTPS+post

반응형

'Android' 카테고리의 다른 글

안드로이드에서 SSL통신  (0) 2012.04.16
Android 이메일&MMS 로 이미지 파일 첨부 보내기  (0) 2011.10.21
Android 미디어스캔  (0) 2011.10.21
Android에서 C2DM 사용하기  (0) 2011.10.19
버튼에 이미지와 텍스트  (0) 2011.10.17