Code source pour s'authentifier sur Geocaching [RESOLU]
Message
Re: Code source pour s'authentifier sur Geocaching
Merci Surfoo, je vais essayer de coder ça..
Message
Re: Code source pour s'authentifier sur Geocaching
Gloire à Surfoo (et Driquet) pour leur code qui m'a permis (enfin) de générer mon code C#.
Voici un exemple fonctionnel de code qui permet de s'authentifier sur GC.com, récupérer le cookie d'authentification pour le réutiliser lors de l'interrogation d'une cache.
Enjoy. Merci à tous !
Voici un exemple fonctionnel de code qui permet de s'authentifier sur GC.com, récupérer le cookie d'authentification pour le réutiliser lors de l'interrogation d'une cache.
Enjoy. Merci à tous !
Code : Tout sélectionner
private void button1_Click(object sender, EventArgs e)
{
String username = "LOGIN A RENSEIGNER";
String password = "MDP A RENSEIGNER";
/* Penser à inclure les dépendances suivantes :
* using System.Net;
* using System.IO;
* using System.Web;
*
* et les références :
* System.Web
* System.Net
*
* Définir les variables suivantes :
* String username = "METTRE VOTRE LOGIN ICI";
* String password = "METTRE VOTRE MDP EN CLAIR ICI";
*/
// Notre container de cookies
CookieContainer cookieJar = new CookieContainer();
// Authentification sur GC.com
// ***************************
// Préparation des données du POST
Dictionary<String, String> post_values = new Dictionary<String, String>();
post_values.Add("__EVENTTARGET", "");
post_values.Add("__EVENTARGUMENT", "");
post_values.Add("ctl00$tbUsername", username);
post_values.Add("ctl00$tbPassword", password);
post_values.Add("ctl00$cbRememberMe", "On");
post_values.Add("ctl00$btnSignIn", "Login");
// Encodage des données du POST
String post_string = "";
foreach (KeyValuePair<String, String> post_value in post_values)
{
post_string += post_value.Key + "=" + HttpUtility.UrlEncode(post_value.Value) + "&";
}
post_string = post_string.TrimEnd('&');
// Création de la requête pour s'authentifier
string VOID_URL = "https://www.geocaching.com/login/default.aspx";
HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(VOID_URL);
objRequest.Method = "POST";
objRequest.ContentLength = post_string.Length;
objRequest.ContentType = "application/x-www-form-urlencoded";
objRequest.Proxy = GetProxy(); // Créer votre proxy ici si besoin, sinon mettre NULL
objRequest.CookieContainer = cookieJar;
// on envoit les POST data dans un stream (écriture)
StreamWriter myWriter = null;
myWriter = new StreamWriter(objRequest.GetRequestStream());
myWriter.Write(post_string);
myWriter.Close();
// lecture du stream de réponse et conversion en chaine
HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
String post_response;
using (StreamReader responseStream = new StreamReader(objResponse.GetResponseStream()))
{
post_response = responseStream.ReadToEnd();
responseStream.Close();
}
// Pour le debug, interrogation du nombre de cookies retournés et trace de cette valeur
// peut être supprimé
int cookieCount = cookieJar.Count;
Log(cookieCount.ToString());
// Récupération d'une page de geocache
// ***********************************
string url = "http://www.geocaching.com/geocache/GC5VFCJ_georando-de-la-plaine-13";
objRequest = (HttpWebRequest)WebRequest.Create(url);
objRequest.Proxy = GetProxy(); // Là encore, on peut virer le proxy si non utilisé (NULL)
objRequest.CookieContainer = cookieJar; // surtout récupérer le container de cookie qui est maintenant renseigné avec le cookie d'authentification
objResponse = (HttpWebResponse)objRequest.GetResponse();
String response;
using (StreamReader responseStream = new StreamReader(objResponse.GetResponseStream()))
{
response = responseStream.ReadToEnd();
responseStream.Close();
}
// On trace le résultat
// Peut être supprimé
LogWeb(response);
}
}