2010-11-20 20 views
8

Salutations,Android: obtenir une réponse d'une URL https

Je développe une application Android et le besoin d'ouvrir une URL (avec des paramètres POST) sur https et obtenir la réponse.

Il y a la complication supplémentaire que j'ai un certificat auto-signé. Je dois également accepter les cookies.

Quelqu'un a-t-il des idées sur où commencer?

Un grand merci à l'avance,

Répondre

3

j'ai réussi à tout travail asyncronously avec des cookies et https non signé.

J'ai utilisé le code ici:

http://masl.cis.gvsu.edu/2010/04/05/android-code-sample-asynchronous-http-connections/

et modifié pour https non signés en utilisant le code de Brian Yarger ici:

Self-signed SSL acceptance on Android

(Ajouter le code ci-dessus au début de l'exécution () dans HttpConnection.java)

Pour que les cookies fonctionnent, j'ai dû modifier du code (P extrait de l'OST de HttpConnection.java):

  case POST: 
      HttpPost httpPost = new HttpPost(url); 
      httpPost.setEntity(new StringEntity(data)); 
      httpPost.addHeader("Cookie", Cookie.getCookie()); 
      response = httpClient.execute(httpPost); 

      Header[] headers=response.getAllHeaders(); 
      for(int i=0;i<headers.length;i++){ 
       if(headers[i].getName().equalsIgnoreCase("Set-Cookie")){ 
        //Log.i("i",headers[i].getName()+"---"+headers[i].getValue()); 
        Cookie.setCookie(headers[i].getValue()); 
        break; 
       } 
      } 
      break; 

Un grand merci à tout le monde pour moi pointant dans la direction,

17

Android est livré avec les communes apache bibliothèque http inclus. Mise en place d'une demande de poste https est assez facile:

HttpPost post = new HttpPost("https://yourdomain.com/yourskript.xyz"); 
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
nameValuePairs.add(new BasicNameValuePair("postValue1", "my Value")); 
nameValuePairs.add(new BasicNameValuePair("postValue2", "2nd Value")); 
post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

HttpClient client = new DefaultHttpClient(); 
HttpResponse response = client.execute(post); 
HttpEntity entity = response.getEntity(); 

String responseText = EntityUtils.toString(entity); 

Android utilise une version 4.x de la Chambre des communes bibliothèque http que toutes les versions ci-dessous 4.0 sont de leur cycle de vie.

Je ne peux pas dire exactement comment enregistrer un certificat auto-signé à la HttpClient, mais MTBE les communes documentation http aide:

http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e506

+0

Salut, merci beaucoup pour votre réponse. Cela fonctionne très bien. Impossible d'obtenir des certificats non signés. En outre, des idées sur la façon dont je pourrais faire fonctionner votre code de manière asynchrone? Je ne veux pas que l'IU soit suspendue en attendant des réponses. – Eamorr

+1

Comme David l'a dit, vous devez démarrer un nouveau thread et mettre l'action http post dans la méthode run. Les données peuvent être échangées entre les threads en utilisant le système de traitement Androids. Vous voudrez peut-être jeter un coup d'œil à la page sur les fondamentaux d'Android: http://developer.android.com/guide/topics/fundamentals.html#threads – marcus