2012-07-16 10 views
8

Ho visto i seguenti collegamenti, ma nulla sembra concreto. Secure HTTP Post in Android Questo non funziona più, l'ho provato e ci sono commenti da altre persone che dicono che non funziona.Come post HTTPS in Android

Ho verificato anche questo: DefaultHttpClient, Certificates, Https and posting problem! Sembra che potrebbe funzionare ma il blogger ti lascia solo in sospeso. Ulteriori istruzioni passo passo sarebbero utili. Sono riuscito a ottenere il mio certificato non sono stato in grado di seguire il suo secondo passo.

http://www.makeurownrules.com/secure-rest-web-service-mobile-application-android.html Questo sembra buono, ma ancora una volta, ho perso l'autore nell'ultimo passaggio: "Torna al nostro codice client di riposo originale". Anche lui è dappertutto, non ho idea di quali librerie sta usando. Non sta spiegando il suo codice e con il

RestTemplate restTemplate = new RestTemplate(); 

è un altro cliffhanger. Perché quella classe non è stata fornita. Quindi, se qualcuno potesse spiegare come fare la richiesta post HTTPS in dettaglio sarebbe fantastico. Devo accettare il certificato autofirmato.

risposta

11

Spero sarebbe d'aiuto. Questo è il codice che ho usato e ha funzionato perfettamente.

private HttpClient createHttpClient() 
{ 
    HttpParams params = new BasicHttpParams(); 
    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", PlainSocketFactory.getSocketFactory(), 80)); 
    schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); 
    ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg); 

    return new DefaultHttpClient(conMgr, params); 
} 

Poi creare un HttpClient in questo modo: -

HttpClient httpClient = createHttpClient(); 

e utilizzarlo con HttpPost.

Saluti !!

EDIT

E non ho usato RestTemplate nel mio codice. Ho fatto una semplice richiesta di post. Se hai bisogno di ulteriore aiuto fammelo sapere. Sembra che recentemente ho fatto qualcosa di simile a quello che stai cercando.

0

questo è il metodo che ho usato per HTTPS Post e Qui ho usato certificato personalizzato, quindi modificare l'assegnazione HttpClient con il vostro proprio ...

public String postData(String url, String xmlQuery) { 



     final String urlStr = url; 
     final String xmlStr = xmlQuery; 
     final StringBuilder sb = new StringBuilder(); 



     Thread t1 = new Thread(new Runnable() { 

      public void run() { 

       HttpClient httpclient = MySSLSocketFactory.getNewHttpClient(); 

       HttpPost httppost = new HttpPost(urlStr); 


       try { 

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
          1); 
        nameValuePairs.add(new BasicNameValuePair("xml", xmlStr)); 

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

        HttpResponse response = httpclient.execute(httppost); 

        Log.d("Vivek", response.toString()); 

        HttpEntity entity = response.getEntity(); 
        InputStream i = entity.getContent(); 

        Log.d("Vivek", i.toString()); 
        InputStreamReader isr = new InputStreamReader(i); 

        BufferedReader br = new BufferedReader(isr); 

        String s = null; 


        while ((s = br.readLine()) != null) { 

         Log.d("YumZing", s); 
         sb.append(s); 
        } 


        Log.d("Check Now",sb+""); 




       } catch (ClientProtocolException e) { 

        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } /* 
       * catch (ParserConfigurationException e) { // TODO 
       * Auto-generated catch block e.printStackTrace(); } catch 
       * (SAXException e) { // TODO Auto-generated catch block 
       * e.printStackTrace(); } 
       */ 
      } 

     }); 

     t1.start(); 
     try { 
      t1.join(); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     System.out.println("Getting from Post Data Method "+sb.toString()); 

     return sb.toString(); 
    } 
+0

"Questo è il metodo che ho usato per HTTP Post e qui ho usato il certificato personalizzato, quindi modificare l'assegnazione HttpPost con il proprio ..." Ho bisogno di lavorare con HTTPS post non http post. Grande differenza. –

+0

dispiace il mio errore HTTPS, funziona con HTTPS ... provare per credere .. –

+0

fare un tentativo, funzionerà ..... –