Aquí hay una manera de hacerlo.
Envía este método la url y los parámetros de nombre/valor en forma de NameValueCollection. El método crea una publicación Http en el punto final y devuelve la respuesta como una cadena.
Por supuesto, dependiendo de qué/por qué lo hace y cuántas veces se llamará este método, quizás haya otras alternativas. Pero hasta que proporcione más información sobre sus necesidades específicas, este método es lo suficientemente bueno.
El método siguiente utiliza Tareas (.NET 4.0) y los métodos asíncronos, por lo que será más rápido que un método síncrono como el siguiente listado de códigos si está haciendo múltiples llamadas en un bucle, por ejemplo.
static string GetWebResponse(string url, NameValueCollection parameters)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Method = "POST";
var sb = new StringBuilder();
foreach (var key in parameters.AllKeys)
sb.Append(key + "=" + parameters[key] + "&");
sb.Length = sb.Length - 1;
byte[] requestBytes = Encoding.UTF8.GetBytes(sb.ToString());
httpWebRequest.ContentLength = requestBytes.Length;
using (var requestStream = httpWebRequest.GetRequestStream())
{
requestStream.Write(requestBytes, 0, requestBytes.Length);
requestStream.Close();
}
Task<WebResponse> responseTask = Task.Factory.FromAsync<WebResponse>(httpWebRequest.BeginGetResponse, httpWebRequest.EndGetResponse, null);
using (var responseStream = responseTask.Result.GetResponseStream())
{
var reader = new StreamReader(responseStream);
return reader.ReadToEnd();
}
}
también podría utilizar WebClient (es un poco más simple). Este método espera los parámetros colocamos como una cadena de la forma
name1=value1&name2=value2&name3=value3
etc Por lo tanto, si se utiliza este método, asegúrese de pasar en sus parámetros, como tal, o modificar la implementación de ser como el código de seguridad.
static string HttpPost(string url, string Parameters)
{
var req = System.Net.WebRequest.Create(url);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
req.ContentLength = bytes.Length;
System.IO.Stream os = req.GetRequestStream();
os.Write (bytes, 0, bytes.Length);
os.Close();
System.Net.WebResponse resp = req.GetResponse();
if (resp== null)
return null;
var sr = new StreamReader(resp.GetResponseStream());
return sr.ReadToEnd().Trim();
}
Como mencioné en otro comentario, necesito poder hacer un Response.Redirect() regular después de "construir" la solicitud con las variables de POST que necesito. – Farinha
@Farina, luego modifique su pregunta y deje eso en claro. No puede esperar que todos lean todos sus comentarios solo para comprender lo que necesita. –
@Farina, leí el otro comentario y no estoy seguro de entender su requisito, así que por favor tómese el tiempo para explicar lo más claramente posible qué es lo que está tratando de hacer (en su pregunta). Cuando realiza una solicitud http (GET o POST) del otro lado, puede enviarlo a redirigir. En ese caso, necesitas seguir esa redirección. Usted no puede hacer un redireccionamiento usted mismo. –