2013-06-25 5 views
0

J'ai écrit une application Android qui devrait se connecter à un forum (privé) en utilisant les requêtes HTTP GET (et parfois POST). L'idée de base est la suivante:Android HTTP GET problème de cookie/javascript?

  1. Page de connexion où les utilisateurs soumettent leurs informations d'identification. La connexion est effectuée en faisant un HTTP POST (essayé GET aussi, même résultat) à la page de connexion du forum, avec leurs nom d'utilisateur et mot de passe comme paramètres. La demande doit renvoyer certains cookies que je stocke dans un BasicCookieStore.

  2. Chaque page du forum qu'ils veulent visiter est récupérée en utilisant HTTP GET. J'analyse la source HTML que j'obtiens et je leur montre seulement les informations pertinentes. Afin d'authentifier les utilisateurs, le même BasicCookieStore que j'ai utilisé pour la connexion (étape 1) est défini comme le cookiestore pour le HttpClient.

Cette méthode a fonctionné tout le temps pendant mes tests et a également fonctionné pour mes bêta-testeurs. Maintenant que j'ai publié l'application, il est devenu évident que de nombreux utilisateurs avaient des problèmes, en particulier sur connexions mobiles (Wifi ne semble pas être un problème). En consignant la source HTML qui a été renvoyée dans toutes les requêtes HTTP GET, je pense que la connexion fonctionne correctement, mais les cookies ne sont pas retournés ou stockés ou quelque chose dans ce sens. Le problème est que la source HTML de la première page qu'ils recevront devrait être la liste des forums. Dans le cas des utilisateurs ayant des problèmes cependant, ils reçoivent une page qui lit essentiellement "Vous devez activer Javascript pour afficher cette page". La chose étrange est, je ne reçois pas cette page lors du test, ni beaucoup de mes utilisateurs. Pire encore: certains utilisateurs rapportent maintenant que cela a bien fonctionné pour eux pendant des jours ou des semaines, et a maintenant cessé de fonctionner. D'autres ont exactement le contraire: ne pas travailler pendant des jours, travaillant soudainement maintenant. Un utilisateur a indiqué qu'il était en Grèce depuis 2 semaines, où il a fonctionné parfaitement, puis il est retourné en Allemagne, et il a cessé de fonctionner à nouveau. Il semble y avoir une composante aléatoire ici.

J'ai essayé plusieurs choses, principalement avec la façon dont je fais les requêtes HTTP GET. J'ai commencé à l'aide de la DefaultHttpClient normale, avec divers paramètres, tels que celui-ci:

HttpClient httpClient = new DefaultHttpClient(); 

// Define parameters 
HttpParams httpParams = httpClient.getParams(); 
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT); 
HttpConnectionParams.setSoTimeout(httpParams, TIMEOUT); 
HttpProtocolParams.setVersion(httpParams, HttpVersion.HTTP_1_1); 

// Set cookiestore (getCookieStore returns the same cookiestore) 
HttpContext localContext = new BasicHttpContext(); 
localContext.setAttribute(ClientContext.COOKIE_STORE, getCookieStore()); 

HttpGet http = new HttpGet(url); 
http.addHeader("Accept", ACCEPT_STRING); 
http.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); 

// Execute 
HttpResponse response = httpClient.execute(http, localContext); 
//... Process result (omitted) 

Maintenant, j'ai commencé à utiliser à la place AndroidHttpClient, avec le reste du code pratiquement inchangé, et semblent obtenir le même résultat.

J'ai également essayé d'utiliser la bibliothèque AsyncHttpClient, qui fonctionne de manière très différente, mais encore une fois le même résultat. J'ai aussi essayé d'utiliser son PersistentCookieStore, et vous l'avez deviné - le même résultat.

Je ne sais rien à ce stade. Est-ce que je regarde dans la mauvaise direction? Le fait qu'un site web réponde "vous devez activer Javascript" pour certains utilisateurs mais pas pour tous semble indiquer un problème avec les cookies. Je ne sais pas comment un site web détermine si javascript est activé, mais sûrement avec une requête HTTP GET il n'y a pas de javascript en jeu. Alors pourquoi est-ce que je (et beaucoup d'autres utilisateurs) accède à la page sans problème, alors que d'autres reçoivent le message 'no javascript'? La seule raison à laquelle je peux penser est des cookies, mais je n'ai aucune idée de ce que le problème est exactement.

Toute aide serait grandement appréciée!

Répondre

0

Je doute que le problème soit des cookies. Plus probable est un problème de configuration réseau.Par exemple, votre utilisateur peut être connecté à un hotspot Wi-Fi avec une page portail captive (qui utilise javascript pour vous connecter avant de pouvoir utiliser le hotspot). Dans ce cas, ils doivent d'abord ouvrir le navigateur, essayer de naviguer vers (par exemple) http://google.com, être redirigé, se connecter, et puis lancer votre application.

Ou, votre utilisateur peut se connecter via un proxy. De nombreux opérateurs de téléphonie mobile à travers le monde vont utiliser les connexions HTTP de leurs utilisateurs, faisant parfois des choses horribles au contenu. Passer à HTTPS pourrait aider avec cela.

+0

Merci. Un hotspot Wifi semble peu probable vu qu'ils ont surtout des problèmes lors des connexions mobiles (3G, 4G, etc). Votre deuxième suggestion pourrait être le problème. Comment contourner les problèmes de proxy? Puis-je simplement remplacer «http» par «https» dans l'url même si les pages sont normalement accessibles via http (avec la page de connexion étant la seule exception qui est toujours https)? –