2011-06-05 2 views
1

Auparavant, j'ai posé une question au Android to Drupal cookie transfer sur l'envoi de cookies de mon application Android à mon site Drupal à laquelle j'ai obtenu une très bonne réponse. L'idée est de permettre une interaction persistante Client-Serveur.Android au transfert de cookie Drupal Q2

J'ai ajusté mon code comme indiqué, mais je n'arrive toujours pas à faire fonctionner les choses correctement. Mes réglages de code sont ci-dessous:

protected Void doInBackground(Void... params) { 
     // TODO Auto-generated method stub 

     HttpResponse response; 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost  = new HttpPost("http://testsite.com/testpoint/node/"); 

     BasicHttpContext basicContext = new BasicHttpContext(); 
     org.apache.http.client.CookieStore cookiestore = new BasicCookieStore(); 
     basicContext.setAttribute(ClientContext.COOKIE_STORE, cookiestore); 
     basicContext.setAttribute(USERPREFERENCES.getString(COOKIE_NAME, ""), USERPREFERENCES.getString(COOKIE_VALUE, "")); 
     //USERPREFERENCES.getString(CO0OKIE_NAME, ""), USERPREFERENCES.getString(COOKIE_VALUE, "") 

      // TODO Auto-generated method stub 
      try{ 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
       nameValuePairs.add(new BasicNameValuePair("node[title]", "sample node from app")); 
       nameValuePairs.add(new BasicNameValuePair("node[type]", "story")); 
       nameValuePairs.add(new BasicNameValuePair("node[body]", "sample app node body content")); 
       httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       //Execute HTTP post request 
       //HttpResponse 
       response = httpClient.execute(httpPost, basicContext); 

       Log.i("SEEMS TO WORK", response.toString()); 
       Log.v("CODE", httpPost.getRequestLine().toString() + " - " + response.toString()); 

      }catch(Exception e){ 
       Log.e("HTTP-ERROR: node creation", e.toString()); 
      } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     //Toast.makeText(getApplicationContext(), "Create Node thread returning!", Toast.LENGTH_LONG).show(); 
     Toast.makeText(getApplicationContext(), "Testing header: Cookie: " + USERPREFERENCES.getString(COOKIE_NAME, "") +","+ USERPREFERENCES.getString(COOKIE_VALUE, ""), Toast.LENGTH_LONG).show(); 
    } 

} 

Fondamentalement, mon nom de cookie et valeur sont stockés dans mes préférences partagées USERPREFERENCES.getString (cookie_name, "") et USERPREFERENCES.getString (COOKIE_VALUE, ""). J'essaie de renvoyer cette information afin que lorsque cette fonction s'exécute et crée avec succès un nouveau nœud d'histoire sur mon site Drupal, l'auteur est reconnu comme l'utilisateur qui s'est inscrit et s'est connecté depuis l'application Android.

Actuellement, le noeud est créé mais l'utilisateur est "anonyme". Par conséquent, j'ai besoin de renvoyer les informations sur les cookies des utilisateurs de Drupal.

Quelqu'un peut-il m'aider s'il vous plaît?

Répondre

1

Ceci n'est pas nécessairement une solution de code à votre problème, mais peut être utile. Lorsque j'aborde des problèmes comme celui-ci, j'ai besoin d'un moyen de voir à quoi ressemblent les en-têtes de demande vers et depuis mon application.

J'utilise généralement Charles (grand outil) http://www.charlesproxy.com/ pour cela. Et non, je n'ai aucun lien avec l'entreprise, c'est juste un excellent outil. Il existe une fonctionnalité dans Charles appelée proxy inverse qui vous permet de faire passer le trafic de Charles vers votre serveur drupal et de l'inspecter au fur et à mesure qu'il circule vers et depuis votre application. En utilisant charles, vous pouvez sentir à quoi ressemble une bonne requête de votre navigateur web et ensuite vous pouvez sentir à quoi ressemblent les requêtes de votre application Android. Comparez les deux et vous pouvez voir où votre application est mal en forme les en-têtes de la demande.

La phase de débogage va comme ceci:

Une fois que vous avez mis en place Charles, a frappé votre serveur quelques drupal fois et inspecter la structure de la demande/réponse que vous voyez à partir du navigateur.

Ensuite, appuyez sur votre service à quelques reprises de l'application Android et notez les différences. Peut-être que le cookie ne passe pas, peut-être est-il mal formé, peut-être qu'il y a quelque chose d'autre dans les en-têtes. Cela vous permettra de voir ce que vous devez filmer pour que Drupal accepte les demandes.

QUELQUES INSTRUCTIONS PLUS -

Le proxy inverse vous permettra d'inspecter le trafic provenant de votre téléphone et allez sur votre site Drupal (y compris les en-têtes de sorte que vous devriez voir exactement ce que les cookies sont envoyés). Pour obtenir la configuration du proxy inverse, vous devez aller dans Reverse Proxy dans le menu proxy et ajouter un nouveau proxy inverse - le proxy prendra le trafic dirigé vers votre localhost: PORTNUM et le redirigera vers votre serveur drupal. Il enregistrera les communications dans les deux sens. En outre, vous pouvez contacter votre service Drupal plusieurs fois depuis FireFox et regarder comment une application Web s'authentifie pour que vous sachiez ce que vous visez.

Pour voir le trafic téléphonique, vous devez vous assurer que votre téléphone est connecté au même réseau que votre ordinateur.Réécrivez votre code de téléphone afin qu'il adresse ses demandes Web à votre ordinateur local. Si tout est configuré correctement, Charles affichera un message vous demandant si vous pouvez autoriser votre téléphone à se connecter. Après cela, vous pouvez voir ce qui est différent des en-têtes que vous envoyez à partir de ce que le serveur Web envoie.

+0

Nous vous remercions de votre suggestion d'outil. Je vais y aller tout de suite. – sisko

+0

np. Obtenir le proxy inverse mis en place correctement peut être un peu un tour. Faites-moi savoir si vous avez des problèmes et je peux essayer de vous orienter dans la bonne direction. – walta

+0

Salut Walta, ça va paraître fou mais le site charlesproxy semble être en panne. J'ai réussi à le télécharger à la maison sur Linux mais au travail sur ma machine Windows où je peux passer plus de temps à jouer, le site refuse de charger ... – sisko