2013-04-04 6 views
5

Z powodzeniem nazwałem usługę odpoczynku w systemie Android za pomocą http.jak zadzwonić do usługi bezpiecznego odpoczynku https z Androidem za pomocą httpclienta

Ale teraz chcę zadzwonić do spokojnej usługi HTTPS w Androidzie Używam API HTTPmime z Apache do wywołania usługi odpoczynku.

Proszę ktoś może mi pomóc, aby wywołać usługę bezpiecznego odpoczynku w Android

+0

Czy masz jakieś problemy, myślę, że nie powinieneś, jeśli tak, to co? – Prateek

+0

Co próbujesz? –

+0

Próbowałem ten link http://stackoverflow.com/questions/2864016/httpclient-ssl-certificate-on-android ale nie mogę zrozumieć, jak korzystać z tego protokołu SSL z HttpClient zadzwonić mój serwis –

Odpowiedz

0

tutaj jest przykładowy kod, który można użyć, aby zignorować błędy certyfikatów SSL zrobić nową klasę Javy o nazwie SimpleSSLSocketFactory

public class SimpleSSLSocketFactory extends org.apache.http.conn.ssl.SSLSocketFactory { 
    private SSLSocketFactory sslFactory = HttpsURLConnection.getDefaultSSLSocketFactory(); 

    public SimpleSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, 
      UnrecoverableKeyException { 
     super(null); 

     try { 
      SSLContext context = SSLContext.getInstance("TLS"); 

      // Create a trust manager that does not validate certificate chains and simply 
      // accept all type of certificates 
      TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
       public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
        return new java.security.cert.X509Certificate[] {}; 
       } 

       public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { 
       } 

       public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { 
       } 
      } }; 

      // Initialize the socket factory 
      context.init(null, trustAllCerts, new SecureRandom()); 
      sslFactory = context.getSocketFactory(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { 
     return sslFactory.createSocket(socket, host, port, autoClose); 
    } 

    @Override 
    public Socket createSocket() throws IOException { 
     return sslFactory.createSocket(); 
    } 
} 

i wykorzystanie po httpclient zamiast domyślnego klienta

// Setup a custom SSL Factory object which simply ignore the certificates 
    // validation and accept all type of self signed certificates 
    SSLSocketFactory sslFactory = new SimpleSSLSocketFactory(null); 
    sslFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); 

    // Enable HTTP parameters 
    HttpParams paramsSecure = new BasicHttpParams(); 
    HttpProtocolParams.setVersion(paramsSecure, HttpVersion.HTTP_1_1); 
    HttpProtocolParams.setContentCharset(paramsSecure, HTTP.UTF_8); 

    // Register the HTTP and HTTPS Protocols. For HTTPS, register our custom SSL Factory object. 
    SchemeRegistry registry = new SchemeRegistry(); 
    registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
    registry.register(new Scheme("https", sslFactory, 443)); 

    // Create a new connection manager using the newly created registry and then create a new HTTP client 
    // using this connection manager 
    ClientConnectionManager ccm = new ThreadSafeClientConnManager(paramsSecure, registry); 
    HttpClient httpclient = new DefaultHttpClient(ccm, paramsSecure); 

Pozdrawiam!

+0

Sourabh thanx dla twojej odpowiedzi ..... ale teraz daje "500 wewnętrzny błąd serwera" html jako odpowiedź –

+0

powyższy kod nie działa dla mnie. –

+0

Czy używasz tej usługi na swoim lokalnym serwerze? – Prateek

Powiązane problemy