El código para completar y enviar el formulario anterior es el siguiente:
// Cadena URI para enviar el formulario.
cadena uriString = " http://www.xxx.com/Login.aspx ";
// Cadena de datos para enviar.
string postString = "nombre de usuario=usuario1&contraseña=contraseña1";
//Inicializar WebClient
WebClient webClient = nuevo WebClient();
webClient.Headers.Add("Tipo de contenido", "aplicación/x-www-form-urlencoded");
//Convierte cadena a matriz de bytes
byte[] postData = Codificación.ASCII.GetBytes(postString);
//Sube datos y devuelve la matriz de bytes de la página
byte[] ResponseData = webClient.UploadData(uriString, "POST", postData);
//Convierte la matriz de bytes devuelta en una cadena (HTML)
cadena srcString = Codificación.UTF8.GetString(responseData);
srcStrinig es el HTML de la página devuelta después de enviar el formulario. ¿Qué tal? Es muy simple.
Sin embargo, el código anterior puede enviar el formulario generado por ASP o JSP, pero no puede enviar el formulario ASP.NET. Porque al enviar un formulario ASP.NET se deben asignar valores a "__VIEWSTATE" y "__EVENTVALIDATION". Los valores de "__VIEWSTATE" y "__EVENTVALIDATION" se pueden encontrar haciendo clic derecho en "Ver código fuente" en la página que se enviará. como sigue:
id="__VIEWSTATE" value="/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0="
id="__EVENTVALIDATION" value="/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc"
Los valores de "__VIEWSTATE" y "__EVENTVALIDATION" obtenidos a través de "Ver archivo fuente" no se pueden enviar directamente al formulario y deben convertirse en cadenas codificadas en URL.
viewState = System.Web.HttpUtility.UrlEncode(viewState);
eventValidation = System.Web.HttpUtility.UrlEncode(eventValidation);
El código completo es el siguiente:
// Texto del botón de enviar
string submitButton = "Iniciar sesión";
//VeiwState de la página (se puede obtener abriendo la página a través de IE y haciendo clic derecho en "Ver archivo fuente")
cadena viewState = "/wEPDwUKMTg0NTgwMzM2M2RksjXHwIOzdq/skwDy1k6qTexm2j0=";
//Validación del evento de la página (se puede obtener abriendo la página a través de IE y haciendo clic derecho en "Ver archivo fuente")
string eventValidation = "/wEWBAKxhbOEAQKPpuq2CALyveCRDwLejM6fDwP2723lUdzBJVBIAVzbpM2sXYqc";
submitButton = System.Web.HttpUtility.UrlEncode(submitButton);
viewState = System.Web.HttpUtility.UrlEncode(viewState);
intentar
);
{
// Cadena URI para enviar el formulario.
cadena uriString = " http://www.xxx.com/Login.aspx ";
// Cadena de datos para enviar. El formato es el siguiente: usuario=uesr1&contraseña=123
string postString = "nombre de usuario=1&contraseña=1" + "&loginButton=" + submitButton + "&__VIEWSTATE=" + viewState + "&__EVENTVALIDATION=" + eventValidation;
//Inicializar WebClient
WebClient webClient = nuevo WebClient();
webClient.Headers.Add("Tipo de contenido", "aplicación/x-www-form-urlencoded");
//Convierte cadena a matriz de bytes
byte[] postData = Codificación.ASCII.GetBytes(postString);
//Sube datos y devuelve la matriz de bytes de la página
byte[] ResponseData = webClient.UploadData(uriString, "POST", postData);
// Convierte la matriz de bytes devuelta en una cadena (HTML);
// La página devuelta por ASP.NET es generalmente Unicode. Si es chino simplificado, se debe utilizar.
// Codificación.GetEncoding("GB2312").GetString(responseData)
cadena srcString = Codificación.UTF8.GetString(responseData);
}
atrapar (WebException nosotros)
{
mensaje de cadena = nosotros.Mensaje;
}
Algunas notas:
1) srcStrinig es el HTML de la página devuelta después de enviar el formulario. Puede utilizar expresiones regulares para analizarlo y obtener los datos que necesita.
2) Los valores de "__VIEWSTATE" y "__EVENTVALIDATION" no son estáticos.
3) También puede ver los datos POST de la página web a través de algunas herramientas, como: herramienta de análisis de datos de la página web HttpWatch, rastreador de red, etc.
4) Si el formulario enviado tiene un código de verificación, no está dentro del alcance de este artículo.
URL de este artículo: http://www.cnblogs.com/anjou/archive/2006/12/25/602943.html