2013-04-04 22 views
5

का उपयोग करके एंड्रॉइड से https सुरक्षित आराम सेवा को कॉल करने के लिए मैंने http के साथ एंड्रॉइड में सफलतापूर्वक सेवा को सफलतापूर्वक कॉल किया है।httpclient

लेकिन अब मैं एंड्रॉइड में HTTPS आराम सेवा को कॉल करना चाहता हूं, मैं अतिरिक्त सेवा कॉल करने के लिए अपाचे के HTTPmime API का उपयोग कर रहा हूं।

कृपया किसी भी एक मेरी मदद कर सकते एंड्रॉयड

+0

क्या आपको कोई समस्या है जो मुझे लगता है कि आपको नहीं करना चाहिए, अगर हां तो क्या? – Prateek

+0

आपने क्या प्रयास किया है? –

+0

मैं इस लिंक http://stackoverflow.com/questions/2864016/httpclient-ssl-certificate-on-android की कोशिश की है लेकिन मैं नहीं समझ सकता कैसे HttpClient के साथ इस SSL का उपयोग करने के लिए अपने सेवा –

उत्तर

0

यहाँ में सुरक्षित बाकी सेवा को कॉल करने नमूना कोड है कि आप की अनदेखी करने के एसएसएल प्रमाणपत्र में त्रुटियाँ 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(); 
    } 
} 

और उपयोग नामक एक नया जावा वर्ग बनाने का उपयोग कर सकते है डिफ़ॉल्ट क्लाइंट के बजाय httpclient का पालन

// 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); 

चीयर्स !!

+0

सौरभ thanx कॉल करने के लिए आपके उत्तर के लिए ..... लेकिन अब जवाब के रूप में "500 आंतरिक सर्वर त्रुटि" एचटीएमएल देता है –

+0

यह उपरोक्त कोड मेरे लिए काम नहीं कर रहा है। –

+0

क्या आप इस सेवा को अपने स्थानीय सर्वर पर चला रहे हैं? – Prateek