Le code pour remplir et soumettre le formulaire ci-dessus est le suivant :
// Chaîne URI pour soumettre le formulaire.
chaîne uriString = " http://www.xxx.com/Login.aspx ";
// Chaîne de données à soumettre.
string postString = "userName=user1&password=password1";
//Initialiser WebClient
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//Convertir la chaîne en tableau d'octets
byte[] postData = Encoding.ASCII.GetBytes(postString);
//Télécharger les données et renvoyer le tableau d'octets de la page
byte[] réponseData = webClient.UploadData(uriString, "POST", postData);
//Convertir le tableau d'octets renvoyé en chaîne (HTML)
chaîne srcString = Encoding.UTF8.GetString(responseData);
srcStrinig est le HTML de la page renvoyée après la soumission du formulaire. Et si ? C'est très simple.
Cependant, le code ci-dessus peut soumettre le formulaire généré par ASP ou JSP, mais ne peut pas soumettre le formulaire ASP.NET. Car lors de la soumission d'un formulaire ASP.NET, les valeurs doivent être attribuées à "__VIEWSTATE" et "__EVENTVALIDATION". Les valeurs de "__VIEWSTATE" et "__EVENTVALIDATION" peuvent être trouvées en cliquant avec le bouton droit sur "Afficher la source" sur la page à soumettre. comme suit:
id="__VIEWSTATE" value="/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0="
id="__EVENTVALIDATION" value="/wEWBAKxhbOEAQKPpuq2CAlyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc"
Les valeurs de « __VIEWSTATE » et « __EVENTVALIDATION » obtenues via « View Source File » ne peuvent pas être directement soumises au formulaire et doivent être converties en chaînes codées en URL.
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
Le code complet est le suivant :
// Texte du bouton de soumission
string submitButton = "Connexion" ;
//VeiwState de la page (peut être obtenu en ouvrant la page via IE, en cliquant avec le bouton droit sur "Afficher le fichier source")
string viewState = "/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=";
//EventValidation de la page (peut être obtenu en ouvrant la page via IE, en cliquant avec le bouton droit sur "Afficher le fichier source")
string eventValidation = "/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc";
submitButton = System.Web.HttpUtility.UrlEncode(submitButton);
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation
);
{
// Chaîne URI pour soumettre le formulaire.
chaîne uriString = " http://www.xxx.com/Login.aspx ";
// Chaîne de données à soumettre. Le format est le suivant : user=uesr1&password=123
string postString = "userName=1&password=1" + "&loginButton=" + submitButton + "&__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventValidation ;
//Initialiser WebClient
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//Convertir la chaîne en tableau d'octets
byte[] postData = Encoding.ASCII.GetBytes(postString);
//Télécharger les données et renvoyer le tableau d'octets de la page
byte[] réponseData = webClient.UploadData(uriString, "POST", postData);
// Convertit le tableau d'octets renvoyé en chaîne (HTML) ;
//La page renvoyée par ASP.NET est généralement Unicode. Si elle est en chinois simplifié, elle doit être utilisée.
// Encodage.GetEncoding("GB2312").GetString(responseData)
chaîne srcString = Encoding.UTF8.GetString(responseData);
}
attraper (WebException nous)
{
chaîne msg = we.Message ;
}
Quelques remarques :
1) srcStrinig est le HTML de la page renvoyé après la soumission du formulaire. Vous pouvez utiliser des expressions régulières pour l'analyser afin d'obtenir les données dont vous avez besoin.
2) Les valeurs de "__VIEWSTATE" et "__EVENTVALIDATION" ne sont pas statiques.
3) Vous pouvez également afficher les données POST des pages Web via certains outils, tels que : l'outil d'analyse des données de pages Web HttpWatch, le renifleur de réseau, etc.
4) Si le formulaire soumis comporte un code de vérification, cela n'entre pas dans le champ d'application de cet article.
URL de cet article : http://www.cnblogs.com/anjou/archive/2006/12/25/602943.html