c# asp.net

c# - ¿Cómo rellena programáticamente un formulario y ''POST'' una página web?



asp.net (6)

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

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 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.


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

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

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


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 pila de surf esta es la mejor respuesta que encontré . este hilo explica todo

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


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