Vous pouvez continuer à utiliser WebClient pour POST (au lieu de GET, qui est le HTTP verb que vous utilisez actuellement avec DownloadString), mais je pense que vous trouverez plus facile de travailler avec les classes (légèrement) de niveau inférieur WebRequest et WebResponse.
Il y a deux parties à cela: la première est de poster le formulaire de connexion, la seconde récupère l'entête "Set-cookie" et l'envoie au serveur en tant que "Cookie" avec votre requête GET. Le serveur utilisera ce cookie pour vous identifier à partir de maintenant (en supposant qu'il utilise une authentification basée sur les cookies dont je suis assez confiant car cette page renvoie un en-tête Set-cookie qui inclut "PHPSESSID").
Affectations à la forme de connexion
messages de formulaire sont faciles à simuler, il est juste un cas de formatage de vos données post comme suit:
field1=value1&field2=value2
En utilisant WebRequest et le code I adapté de Scott Hanselman, voici comment vous POST former des données à votre formulaire de connexion:
string formUrl = "http://www.mmoinn.com/index.do?PageModule=UsersAction&Action=UsersLogin"; // NOTE: This is the URL the form POSTs to, not the URL of the form (you can find this in the "action" attribute of the HTML's form tag
string formParams = string.Format("email_address={0}&password={1}", "your email", "your password");
string cookieHeader;
WebRequest req = WebRequest.Create(formUrl);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];
Voici un exemple de ce que vous devriez voir dans l'en-tête Set-Cookie pour votre formulaire de connexion:
PHPSESSID=c4812cffcf2c45e0357a5a93c137642e; path=/; domain=.mmoinn.com,wowmine_referer=directenter; path=/; domain=.mmoinn.com,lang=en; path=/;domain=.mmoinn.com,adt_usertype=other,adt_host=-
obtenir la page derrière le formulaire de connexion
Maintenant, vous pouvez effectuer votre GET demande à une page pour laquelle vous devez être connecté.
string pageSource;
string getUrl = "the url of the page behind the login";
WebRequest getRequest = WebRequest.Create(getUrl);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
EDIT:
Si vous voulez voir les résultats de la première POST, vous pouvez récupérer le code HTML, il est revenu avec:
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
}
Placez ce directement au-dessous cookieHeader = resp.Headers["Set-cookie"];
puis inspecter la chaîne contenue dans pageSource.
Alors, je peux penser à un tas de façons de le faire ... Est-ce que Le programme C# demande le 'code' directement depuis le serveur via HTTP ou est-ce que vous vous retrouvez sur l'application du navigateur ou quoi? Un peu plus d'informations est nécessaire. –
Le programme utilise WebClient.DownloadString ("URL") –