Necesito usar "Publicación HTTP" con WebClient para publicar algunos datos en una URL específica que tengo.
Ahora, sé que esto se puede lograr con WebRequest, pero por alguna razón quiero usar WebClient en su lugar. ¿Es eso posible? Si es así, ¿alguien puede mostrarme algún ejemplo o indicarme la dirección correcta?
Acabo de encontrar la solución y sí, fue más fácil de lo que pensaba :)
así que aquí está la solución:
string URI = "http://www.myurl.com/post.php"; string myParameters = "param1=value1¶m2=value2¶m3=value3"; using (WebClient wc = new WebClient()) { wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; string HtmlResult = wc.UploadString(URI, myParameters); }funciona como un encanto :)
Hay un método integrado llamado UploadValues que puede enviar HTTP POST (o cualquier tipo de método HTTP) Y maneja la construcción del cuerpo de la solicitud (concatenación de parámetros con "&" y caracteres de escape mediante codificación de URL) en formato de datos de forma adecuada:
using(WebClient client = new WebClient()) { var reqparm = new System.Collections.Specialized.NameValueCollection(); reqparm.Add("param1", "<any> kinds & of = ? strings"); reqparm.Add("param2", "escaping is already handled"); byte[] responsebytes = client.UploadValues("http://localhost", "POST", reqparm); string responsebody = Encoding.UTF8.GetString(responsebytes); }Usando WebClient.UploadString o WebClient.UploadData puede enviar datos al servidor fácilmente. Mostraré un ejemplo usando UploadData, ya que UploadString se usa de la misma manera que DownloadString.
byte[] bret = client.UploadData("http://www.website.com/post.php", "POST", System.Text.Encoding.ASCII.GetBytes("field1=value1&field2=value2") ); string sret = System.Text.Encoding.ASCII.GetString(bret);