2008-09-02 22 views
5

Tengo que enviar algunos parámetros a una URL fuera de mi red, y los desarrolladores del otro lado me pidieron que no use parámetros HTTP: en su lugar tengo que publicar mis pares clave-valor en HTTP Encabezados.HTTP POST - Estoy atascado

El hecho es que yo no entiendo muy bien lo que quieren decir: He intentado utilizar un post-como Ajax, con objetos xmlhttp, y también he tratado de escribir en la cabecera con algo como

Request.Headers.Add(key,value); 

pero no puedo (excepción del marco); Probé a la inversa, con el objeto de respuesta como

Response.AppendHeader("key", "value"); 

y luego redirigir a la página ... pero esto no funciona, también.

Es evidente, creo, que estoy atrapado allí, ¿alguna ayuda?


EDITAR me olvidó decirte que mi entorno es .Net 2.0, C#, en el servidor Win 2003. La excepción que tengo es

System.PlatformNotSupportedException was unhandled by user code 
    Message="Operation is not supported on this platform." 
    Source="System.Web" 

Esto parece que es causada por mi provisional para Request.Add, MS hace un año publicó algunas correcciones de seguridad que no permiten esto.

Respuesta

1

Como dijo @lassevk, una redirección no funcionará.

Debe usar la clase WebRequest para hacer un HTTP POST desde su página o aplicación. Hay un ejemplo here.

0

Debería publicar más información.

Por ejemplo, ¿esto es C#? Parece que sí, pero podría estar equivocado.

Además, dices que obtienes una excepción, ¿cuál es el tipo de excepción y el mensaje?

En cualquier caso, no puede redirigir a una página para POST, debe enviarla desde el navegador, no desde el servidor, por lo que si desea automatizar esto, supongo que necesitaría generar una página html con una etiqueta de formulario, con algunos campos de entrada ocultos, y luego enviarla con javascript.

0

Creo que significa que no quieren que uses parámetros de URL (GET). Si usa encabezados http, en realidad ya no está consultando a través de POST.

0

¿Qué idioma/marco?

El uso de Python y httplib2, usted debería ser capaz de hacer algo como:

http = httplib2.Http() 
http.request(url, 'POST', headers={'key': 'value'}, body=urllib.urlencode('')) 
0

Creo que el objeto Request sólo aceptaría un determinado conjunto de cabeceras predefinidas.

Hay una enumeración que enumera todos los encabezados HTTP admitidos también.

Pero no puedo recordar que en el momento ... Voy a mirar hacia arriba en un segundo ...

1

Tome un vistazo a HttpWebRequest. Debería poder generar una solicitud a la URL en cuestión utilizando HttpWebRequest.Method = "POST".

3

¿Has probado la clase WebClient? Un ejemplo podría ser:

 WebClient client = new WebClient(); 
     NameValueCollection data = new NameValueCollection(); 
     data["var1"] = "var1"; 
     client.UploadValues("http://somewhere.com/api", "POST", data); 
0

Probé su escenario utilizando 2 páginas de muestra con la opción XmlHttpRequest. Los encabezados personalizados están disponibles en la página aspx publicada en, utilizando XmlHttpRequest.

Crea las siguientes 2 páginas. Asegúrese de que la página aspx está en una solución, para que pueda ejecutar el depurador, establecer punto de interrupción e inspeccionar la colección Request.Header.

<html>

<cabeza>

&lt; script language="javascript"&gt; 

function SendRequest() 
{ 
    var r = new XMLHttpRequest(); 
    r.open('get', 'http://localhost/TestSite/CheckHeader.aspx'); 
    r.setRequestHeader('X-Test', 'one'); 
    r.setRequestHeader('X-Test', 'two'); 
    r.send(null); 

} 
&lt; script/&gt; 

</cabeza > <cuerpo> <forma> < input type = "botón" value = "Click Me" onclick =" Enviar petición();"/> </form > </cuerpo > </html >


CheckHeader.aspx

using System;

usando System.Web;

usando System.Web.UI;

pública checkHeader clase parcial: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e) 
{ 
    string value = string.Empty; 
    foreach (string key in Request.Headers) 
     value = Request.Headers[key].ToString(); 
} 

}

hombre .. Este editor HTML chupa .. o no sé cómo utilizar es ...

0

La excepción que enfrentaba ayer fue causada por mi estúpido intento de escribir en los encabezados de la página ya construida.

Cuando comencé a crear mi Solicitud siguiendo uno de los criterios aquí indicados, podía escribir mis encabezados.

Ahora estoy usando el objeto WebRequest, como en la muestra indicada por @sectrean, here.

Muchas gracias a todos. StackOverflow rocks :-)