Der Code zum Ausfüllen und Absenden des obigen Formulars lautet wie folgt:
// URI-Zeichenfolge zum Absenden des Formulars.
string uriString = " http://www.xxx.com/Login.aspx ";
// Zu übermittelnde String-Daten.
string postString = "userName=user1&password=password1";
//WebClient initialisieren
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//String in Byte-Array konvertieren
byte[] postData = Encoding.ASCII.GetBytes(postString);
//Daten hochladen und das Byte-Array der Seite zurückgeben
byte[] ResponseData = webClient.UploadData(uriString, "POST", postData);
//Konvertieren Sie das zurückgegebene Byte-Array in einen String (HTML)
string srcString = Encoding.UTF8.GetString(responseData);
srcStrinig ist der HTML-Code der Seite, die nach dem Absenden des Formulars zurückgegeben wird. Wie wäre es? Es ist ganz einfach.
Der obige Code kann jedoch das von ASP oder JSP generierte Formular senden, nicht jedoch das ASP.NET-Formular. Denn beim Absenden eines ASP.NET-Formulars müssen „__VIEWSTATE“ und „__EVENTVALIDATION“ Werte zugewiesen werden. Die Werte von „__VIEWSTATE“ und „__EVENTVALIDATION“ finden Sie, indem Sie auf der einzureichenden Seite mit der rechten Maustaste auf „Quelle anzeigen“ klicken. wie folgt:
id="__VIEWSTATE" value="/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0="
id="__EVENTVALIDATION" value="/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc"
Die über „Quelldatei anzeigen“ erhaltenen Werte „__VIEWSTATE“ und „__EVENTVALIDATION“ können nicht direkt an das Formular übermittelt werden und müssen in URL-codierte Zeichenfolgen konvertiert werden.
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
Der vollständige Code lautet wie folgt:
// Text der Schaltfläche „Senden“.
string subscribeButton = "Anmelden";
//VeiwState der Seite (erhält man, indem man die Seite über den IE öffnet und mit der rechten Maustaste auf „Quelldatei anzeigen“ klickt)
string viewState = "/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=";
//Ereignisvalidierung der Seite (erhält man, indem man die Seite über den IE öffnet und mit der rechten Maustaste auf „Quelldatei anzeigen“ klickt)
string eventValidation = "/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc";
subscribeButton = System.Web.HttpUtility.UrlEncode(submitButton);
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
try
{
// URI-String zum Absenden des Formulars.
string uriString = " http://www.xxx.com/Login.aspx ";
// Zu übermittelnde String-Daten. Das Format ist wie folgt: user=uesr1&password=123
string postString = "userName=1&password=1" + "&loginButton=" + subscribeButton + "&__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventValidation;
//WebClient initialisieren
WebClient webClient = new WebClient();
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
//String in Byte-Array konvertieren
byte[] postData = Encoding.ASCII.GetBytes(postString);
//Daten hochladen und das Byte-Array der Seite zurückgeben
byte[] ResponseData = webClient.UploadData(uriString, "POST", postData);
// Konvertieren Sie das zurückgegebene Byte-Array in einen String (HTML);
// Die von ASP.NET zurückgegebene Seite ist im Allgemeinen Unicode. Wenn es sich um vereinfachtes Chinesisch handelt, sollte es verwendet werden
// Encoding.GetEncoding("GB2312").GetString(responseData)
string srcString = Encoding.UTF8.GetString(responseData);
}
Catch (WebException wir)
{
string msg = we.Message;
}
Ein paar Anmerkungen:
1) srcStrinig ist der HTML-Code der Seite, die nach dem Absenden des Formulars zurückgegeben wird. Sie können ihn mithilfe regulärer Ausdrücke analysieren, um die benötigten Daten zu erhalten.
2) Die Werte von „__VIEWSTATE“ und „__EVENTVALIDATION“ sind nicht statisch.
3) Sie können Webseiten-POST-Daten auch über einige Tools anzeigen, z. B. das Webseiten-Datenanalysetool HttpWatch, Netzwerk-Sniffer usw.
4) Wenn das eingereichte Formular einen Bestätigungscode enthält, fällt dies nicht in den Geltungsbereich dieses Artikels.
URL dieses Artikels: http://www.cnblogs.com/anjou/archive/2006/12/25/602943.html