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