Android: Comment ouvrir une session dans la page web de la programmation, à l'aide de HttpsURLConnection
Je suis nouveau sur Android (et en Java), donc désolé si mon problème est une idée de base!
Je dois écrire une application Android, qui signe dans un aspx page web en arrière-plan, d'obtenir des données à partir d'elle, et après que les journaux formulaire de la page web. (et de faire que tous les par programme)
Bref, la procédure aime se e-mail-liste à partir de Gmail:
1. aller à "https://mail.google.com' et les signes d'
2. cliquez sur la rubrique "Contacts" (== aller à "https://mail.google.com/mail/?shva=1&zx=dzi4xmuko5nz#contacts")
3. télécharger la page à l'aide de HttpsURLConnection (ou quelque chose de ce genre), et d'obtenir des e-mails en un (par exemple, une Carte ou une Chaîne) objet
4. cliquez sur le lien "Sign out"
J'espère, c'est compréhensible. En regardant sur internet, j'ai trouver la solution pour que la "extraction de la partie", ce qui n'est pas un problème. Mais je n'ai pas la moindre idée de la "en cliquant sur la partie".
......
//Get the connection
URL myurl = new URL("https://mail.google.com");
HttpsURLConnection con = (HttpsURLConnection) myurl.openConnection();
//complete the fields
con.setRequestProperty("Email","myacc");
con.setRequestProperty("Passwd","mypass");
/*
* in this part, should make sign in, and go directly to contacts...
* I don't have any idea how to do it...
*/
//for the present, just write out the data
InputStream ins = con.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(ins));
String inputLine;
while ((inputLine = in.readLine()) != null) {
Log.d("Page:"," "+inputLine);
}
in.close();
/*
* And here should be the "Sign out" part
*/
......
Toute aide serait super, Merci pour elle!
(et désolé, si mon anglais n'est pas si bien...)
EDIT: problème résolu. Merci!!!!
.......
String GMAIL_CONTACTS = "https://mail.google.com/mail/?shva=1#contacts";
String GMAIL_LOGIN = "https://mail.google.com";
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(GMAIL_LOGIN);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
nameValuePairs.add(new BasicNameValuePair("Email", MY_ACC));
nameValuePairs.add(new BasicNameValuePair("Passwd", MY_PASS));
nameValuePairs.add(new BasicNameValuePair("signIn", "Sign In"));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//Execute HTTP Post Request
HttpResponse response = httpClient.execute(httpPost);
Log.d(TAG, "response stat code " + response.getStatusLine().getStatusCode());
if (response.getStatusLine().getStatusCode() < 400) {
String cookie = response.getFirstHeader("Set-Cookie")
.getValue();
Log.d(TAG, "cookie: " + cookie);
//get the contacts page
HttpGet getContacts = new HttpGet(GMAIL_CONTACTS);
getContacts.setHeader("Cookie", cookie);
response = httpClient.execute(getContacts);
InputStream ins = response.getEntity().getContent();
BufferedReader in = new BufferedReader(new InputStreamReader(
ins));
String inputLine;
while ((inputLine = in.readLine()) != null) {
Log.d(TAG, " " + inputLine);
}
in.close();
} else {
Log.d(TAG, "Response error: "
+ response.getStatusLine().getStatusCode());
}
.......
OriginalL'auteur Lama | 2011-08-24
Vous devez vous connecter pour publier un commentaire.
"Cliquant" est essentiellement l'envoi d'une requête à un serveur et d'afficher le retour d'informations.
1/savoir ce que l'url d'appel de la demande (si c'est une page web, voir firebug par exemple)
2/découvrez ce que les paramètres sont, savoir si la méthode est GET ou POST
3/reproduire par programmation.
4/un "login" phase impliquent probablement pas l'utilisation de cookies, le serveur vous donne et que vous devez nous retourner par la suite pour chaque demande
Cependant, votre approche est erronée. Vous ne devez pas vous essayez de vous connecter directement à google via l'url des connexions. (D'ailleurs vous devriez utiliser HttpClient). En outre, les propriétés de la demande ne sont pas des paramètres. Ils sont les en-têtes.
Je vous recommande fortement de commencer avec quelque chose de plus simple pour obtenir à l'aise avec HTTP en java, Obtient, Messages, paramètres, en-têtes, des réponses, des cookies ...
modifier
Une fois que vous recevez la réponse, vous aurez envie de vérifier que
Il vous dira que la connexion a été établie. (2xx sont de succès, 3xx sont déplacés. 4xx sont les erreurs dans la demande, 5xx sont des erreurs côté serveur ; Gmail répond 302 pour vous connecter à suggérer la redirection vers la boîte de réception). Ensuite, vous remarquerez qu'il y a un en-tête particulier dans la réponse de "Set-Cookie", qui contient les cookies que vous souhaitez pour plus de connexions :
Ensuite, vous devriez être en mesure d'appeler la demande pour obtenir les contacts :
Il devrait être quelque chose comme ça.
j'ai éditer mon post avec les infos concernant la deuxième demande
Merci pour le code! Je l'ai essayé (beaucoup de types différents), mais encore à ne pas faire, ce que je veux. Peut-être que je manque quelque chose... j'ai éditer le premier commentaire avec le code, s'il vous plaît, si Vous avez des ide, ce qui est faux, cooment!
OriginalL'auteur njzk2
Ce que vous essayez de faire est d'analyser le Gmail page html. C'est wrongn approche que Gmail utilise javascript pour construire la page. Votre code devra imiter navigateur (exécuter le code javascript) pour que cela fonctionne.
Si vous avez seulement besoin d'un accès en lecture à Gmail puis utiliser Boîte de réception Gmail alimentation de l'API. Cela vous donne accès à des messages non lus dans la boîte de réception.
Si vous avez besoin d'un accès complet puis voir le L'accès IMAP de Gmail. Comme l'IMAP est un protocole différent alors HTTP, vous devez utiliser une autre IMAP bibliothèque java. Voir ce tutoriel.
OriginalL'auteur Peter Knego
Vous devriez envisager d'utiliser une requête post pour transmettre des données au serveur : Envoyer des données POST dans Android
Chaging les propriétés d'une connexion n'a rien à voir avec ce que vous voulez atteindre.
Ce qui concerne,
Stéphane
il n'y a pas de "en cliquant sur le cadre", il suffit de charger cette url avec le même client (apache httpcommons) que vous avez utilisé pour vous connecter. Aussi, n'oubliez pas d'activer les cookies sur le client que la connexion est probablement stocké dans un cookie.
1/ "vous devriez vous suffit de charger cette url avec le même client (apache httpcommons)" 2/ "...activer les cookies..." - mais comment pourrais-je le faire? Je suis nouveau dans Java, pourriez-Vous me donner un exemple de code, s'il vous plaît?
OriginalL'auteur Snicolas