
23/09/2008, 15:47
|
 | Colaborador | | Fecha de Ingreso: septiembre-2007 Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 6 meses Puntos: 87 | |
Respuesta: Cargar formularios web desde aplicacion win. puedes usar
HtmlElement y hacer un Invoke algo como esto HtmlElement el = webBrowser1.Document.All["btnI"];
if (el != null) el.InvokeMember("click");
y hacer lo mismo de los inputs o de los selects de tu pagina html para poder setearles el valor y simular el envio del formulario.
ahora que si lo quieres hacer mas optimo puedes hacer lo mismo sin tener GUI o consumo excesivo de recursos usando HttpWebRequest o un WebClient en ambos casos tendrias que usar un metodo post o get dependiendo el formulario al que quieras enviar.
es decir supongamos que quieres que tu aplicacion win envie las credenciales y simule un login en la pagina solo requieres hacer algo como esto
public void Login(string email, string password)
{
HttpWebRequest request;
HttpWebResponse response;
CookieContainer cookies;
#region Login Request;
string url = "https://tusitioweb.com/";
string data = string.Format("email={0}&pword={1}&remeber=1&action=login", email, password); // AQUI ESTA EL PUNTO CLAVE DEL ASUNTO ---- NECESITAS ENVIAR LOS PARAMETROS TAL COMO APAREZCAN EN TU FORMULARIO esto es solo un ejemplo.
byte[] encodeddata = Encoding.ASCII.GetBytes(data);
request = (HttpWebRequest)WebRequest.Create(url);
request.AllowAutoRedirect = false; // esta en falso pero puede ser verdadero por si el sitio hace un redirect o tiene una pagina en la q tengas q elegir alguna otra opcion
request.CookieContainer = new CookieContainer();
request.Method = "POST";
request.ContentType = "multipart/";
request.ContentLength = encodeddata.Length;
Stream datawriter = request.GetRequestStream();
datawriter.Write(encodeddata, 0, encodeddata.Length); // Grabamos los datos a enviar a la pagina web.
datawriter.Close();
response = null;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (Exception ex)
{
return ex.Message;
}
if (response.StatusCode != HttpStatusCode.Found) // si no fue exitoso el login o no esta disponible
{
Console.WriteLine("Server Unreachable");
response.Close();
request.KeepAlive = false;
return string.Empty;
}
#endregion
#region Transferido desde el login
CookieContainer mineCC = new CookieContainer();
mineCC.Add(response.Cookies);
response.Close();
string menu = string.Empty;
request = (HttpWebRequest)WebRequest.Create(address);
request.AllowAutoRedirect = true;
request.CookieContainer = mineCC;
request.KeepAlive = true;
try
{
response = (HttpWebResponse)request.GetResponse();
}
catch (Exception ex)
{
return ex.Message;
}
#endregion
mineCC.Add(response.Cookies);
response.Close();
} |