¿Cómo rellena programáticamente un formulario y ‘POST’ una página web?

Usando C # y ASP.NET quiero rellenar programáticamente algunos valores (4 cuadros de texto) en una página web (formulario) y luego ‘POST’ esos valores. ¿Cómo hago esto?

Editar: Aclaración: hay un servicio (www.stopforumspam.com) en el que puede enviar la 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 aclaraciones: ¿Cómo completan los bots de spam automatizados los formularios y hacen clic en el botón de enviar si se escribieron en C #?

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

Básicamente, el código se verá algo así:

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(); 

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

Aquí hay una versión simple con algunos errores de manejo:

 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 contenedor simple para el cuerpo de la respuesta y el código de estado.

Vea la fuente de la página y use la clase WebRequest para hacer la publicación. 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.

puede enviar una solicitud de publicación / recepción de muchas maneras. Diferentes tipos de biblioteca están ahí para ayudar. Descubrí que es confuso elegir cuál debo usar y cuáles son las diferencias entre ellos.

Después del desbordamiento de la stack de surf esta es la mejor respuesta que encontré . este hilo explica todo

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

Tuve una situación en la que necesitaba publicar un texto gratis desde un html textarea programáticamente y tuve problemas donde estaba
en mi lista de parámetros que estaba construyendo.

Mi solución fue reemplazar las tags br con caracteres linebreak y htmlencoding solo para estar seguros.

 Regex.Replace( HttpUtility.HtmlDecode( test ), "()", "\r\n" ,RegexOptions.IgnoreCase); 

Donde codificas la cadena:

Encoding.Default.GetBytes (postData);

Use Ascii en su lugar para las apis de google:

Encoding.ASCII.GetBytes (postData);

esto hace que su solicitud sea la misma y su equivalente “curl –data” … “[url]” request