2008-08-25 17 views
30

Uso de C# y ASP.NET Deseo rellenar programáticamente algunos valores (4 cuadros de texto) en una página web (formulario) y luego 'POST' esos valores. ¿Cómo hago esto?¿Cómo rellena programáticamente un formulario y 'POST' una página web?

Editar: Aclaración: hay un servicio (www.stopforumspam.com) donde puede enviar la dirección IP, el nombre de usuario y la dirección de correo electrónico en su página "agregar". Deseo poder crear un enlace/botón en la página de mi sitio que llene esos valores y envíe la información sin tener que copiarlos y pegarlos, y haga clic en el botón Enviar.

Más aclaración: ¿Cómo pueden los bots de spam automatizados completar formularios y hacer clic en el botón de enviar si se escribieron en C#?

+0

Tome un vistazo a [Watin] (http://watin.sourceforge.net/) – SQLMenace

Respuesta

43

Se puede ver una muestra de eso aquí: http://en.csharp-online.net/HTTP_Post

Básicamente, el código se verá algo como esto:

WebRequest req = WebRequest.Create("http://mysite/myform.aspx"); 
string postData = "item1=11111&item2=22222&Item3=33333"; 

byte[] send = Encoding.Default.GetBytes(postData); 
req.Method = "POST"; 
req.ContentType = "application/x-www-form-urlencoded"; 
req.ContentLength = send.Length; 

Stream sout = req.GetRequestStream(); 
sout.Write(send, 0, send.Length); 
sout.Flush(); 
sout.Close(); 

WebResponse res = req.GetResponse(); 
StreamReader sr = new StreamReader(res.GetResponseStream()); 
string returnvalue = sr.ReadToEnd(); 
+1

¿No necesitan ser urlencoded la Postdatum? –

+0

¿Podría explicar cómo recopilar los datos devueltos de la solicitud? –

+3

En el ejemplo anterior, el valor de retorno contiene los datos devueltos de la solicitud. –

1

Ver la fuente de la página y utilizar la clase WebRequest para hacer el anuncio . No es necesario conducir IE. Solo averigüe qué IE está enviando al servidor y replíquelo. Usar una herramienta como Fiddler lo hará aún más fácil.

4

Puede usar el método UploadValues ​​en WebClient; todo lo que necesita es pasar una URL y una NameValueCollection. Es el método más sencillo que he encontrado, y la documentación de MS tiene un buen ejemplo:
http://msdn.microsoft.com/en-us/library/9w7b4fz7.aspx

Aquí es una versión simple con un poco de control de errores:

var webClient = new WebClient(); 
Debug.Info("PostingForm: " + url); 
try 
{ 
    byte [] responseArray = webClient.UploadValues(url, nameValueCollection); 
    return new Response(responseArray, (int) HttpStatusCode.OK); 
} 
catch (WebException e) 
{ 
    var response = (HttpWebResponse)e.Response; 
    byte[] responseBytes = IOUtil.StreamToBytes(response.GetResponseStream()); 
    return new Response(responseBytes, (int) response.StatusCode); 
} 

La clase de respuesta es un simple envoltorio para el cuerpo de respuesta y el código de estado.

0

Tuve una situación en la que necesitaba publicar el texto libre de un html textarea programmatically y tenía problemas donde conseguía <br /> en mi lista de param que estaba construyendo.

Mi solución reemplazaba las etiquetas br con caracteres linebreak y htmlencoding solo para estar seguro.

Regex.Replace(HttpUtility.HtmlDecode(test), "(<br.*?>)", "\r\n" ,RegexOptions.IgnoreCase); 
0

Cuando se codifica la cadena:

Encoding.Default.GetBytes (Postdata);

Uso ASCII en lugar de las API de Google:

Encoding.ASCII.GetBytes (Postdatum);

esto hace que su solicitud el mismo que y equivalente "encresparse --Hojas" ... "[url]" solicitud

1

puede enviar un mensaje/solicitud conseguir con muchas maneras. Diferentes tipos de biblioteca están ahí para ayudar. Encontré que es confundiendo para elegir cuál debo usar y cuáles son las diferencias entre ellas.

Después de la desbordamiento de la pila de surf esta es la mejor respuesta que encontré. este tema se explican todas

https://stackoverflow.com/a/4015346/1999720

Cuestiones relacionadas