2010-06-22 5 views
5

J'essaie actuellement de m'authentifier auprès d'un serveur via un appel HTTP Get. Le code fourni ci-dessous fonctionne lorsqu'il est compilé dans un projet Java. Renvoyer le jeton correct au programme. Cependant, chaque fois que j'essaie d'implémenter le même code dans Android, je ne reçois pas de jeton retourné via l'appel Get.Demande Https, authentification dans Android

Dans Android, je retourne inputLine dans une fonction, cependant inputLine est toujours une chaîne vide.

Le fichier system.out.println() imprime le jeton retourné.

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import javax.net.ssl.HttpsURLConnection; 

public class JavaHttpsExample 
{ 

public static void main(String[] args) 
{ String inputLine = new String(); 
    try 
    { 
    String httpsURL = "https://the url"; 
    URL myurl = new URL(httpsURL); 
    HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection(); 
    InputStream ins = con.getInputStream(); 
    InputStreamReader isr=new InputStreamReader(ins); 
    BufferedReader in =new BufferedReader(isr); 

    inputLine = in.readLine(); 

    System.out.println(inputLine); 

    in.close(); 


    } 
    catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 
} 

merci pour votre aide !!!

+0

USEFULL Pouvez-vous voir ce qui se passe du côté du serveur? Les journaux d'accès, les codes d'état, etc –

+0

malheureusement pas, le serveur est hébergé en dehors de – Mango

+0

Lorsque je cours le code dans Android, il semble toujours échouer à la ligne "InputStream ins - con.getInputStream();" il lance l'IOException. Cependant, cela ne se produit pas lorsque j'utilise le code en tant qu'application Java. – Mango

Répondre

2

Vous n'avez probablement pas ajouté l'autorisation Internet à vos projets AndroidManifest.xml. Si oui, ajoutez la ligne suivante comme un enfant du nœud <manifest/>:

<uses-permission android:name="android.permission.INTERNET" /> 
2

J'utilise POST et FormEntity pour récupérer des données à partir du serveur (telles que l'authentification), et je n'ai jamais eu de problèmes:

final String httpsURL = "https://the url"; 
final DefaultHttpClient client = new DefaultHttpClient(); 
final HttpPost httppost = new HttpPost(httpsURL); 

//authentication block: 
final List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>(); 
nvps.add(new BasicNameValuePair("userName", userName)); 
nvps.add(new BasicNameValuePair("password", password)); 
final UrlEncodedFormEntity p_entity = new UrlEncodedFormEntity(nvps, HTTP.UTF_8); 
httppost.setEntity(p_entity); 

//sending the request and retrieving the response: 
HttpResponse response = client.execute(httppost); 
HttpEntity responseEntity = response.getEntity(); 

//handling the response: responseEntity.getContent() is your InputStream 
final InputSource inputSource = new InputSource(responseEntity.getContent()); 
[...] 

peut-être vous trouverez ce

+0

cela semble vraiment simple pour SSL, je suis surpris, il n'y a aucune utilisation de SchemeRegistry pour enregistrer le "https" régime comme cette personne a fait: http://stackoverflow.com/questions/2603691/android-httpclient-and-https/2603786 # 2603786 –