2008-11-28 22 views
20

En HTML, se pueden enviar datos de una página a otra mediante una petición GET en un par de maneras:¿Es la única forma de pasar los parámetros POST en HTML a través de un formulario?

http://www.example.com/somepage.php?data=1 

... o ...

<form action="somepage.php" method="get"> 
    <input type="hidden" name="data" value="1" /> 
    <input type="submit" value="Submit"> 
</form> 

Con una petición POST aunque , sólo he visto datos que se envían a través de elementos de formulario así:

<form action="somepage.php" method="post"> 
    <input type="hidden" name="data" value="1" /> 
    <input type="submit" value="Submit"> 
</form> 

Si sólo tengo un parámetro que quiero enviar a otra página usando POST, ¿hay una manera más fácil de lo envolviéndolo en una forma?

Respuesta

30

Hay solo dos formas de realizar la POST desde un navegador: un formulario o una solicitud Ajax.

7

Al usar solo HTML, un formulario es la única forma de generar una solicitud POST. Puede usar secuencias de comandos del lado del servidor/Javascript para generar solicitudes POST de otras maneras, pero no otras maneras de hacerlo solo con HTML.

1

En HTML solo está con un formulario.

Pero puede hacerlo si juega con el lado del servidor. Aquí hay un buen artículo que le muestra cómo manipular el Get to Change it to Post a través de PHP. Esto requerirá que juegues con fsockopen ... Esta forma de hacerlo usará tu parámetro? Id = 1 & param = 2 ... y creará una solicitud POST en el lado del servidor. Puede hacerlo genérico, una vez que se configura, funcionará, pero es un poco de trabajo configurar todo primero.

+0

Creo que su intención era crear una solicitud POST para evitar enviar los parámetros a través de la línea de dirección ... que su método derrota. –

+0

Cuando leí su pregunta, entiendo que quiere enviar cosas dentro de la url y no un formulario y proceder a través de POST ... pero podría estar equivocado ... la pregunta no está clara de ... de todos modos lo que sugiero funciona si el OP quiere hacer lo que sugiero. –

4

Como ya ha descubierto, hay exactamente dos formas de transmitir datos a través del protocolo http: GET o POST. También hay un tercer tipo de mensaje HTTP llamado HEAD, pero en realidad solo se usa para obtener metadatos alrededor de un recurso sin descargarlo y no se implementa ampliamente.

Obviamente, tanto GET como POST son fácilmente accesibles mediante el uso de una etiqueta <form>. También se puede acceder fácilmente al GET al agregar manualmente parámetros de consulta a la URL en forma de pares nombre-valor (foo.html?a=1&b=2).

La belleza y la complejidad de POST, sin embargo, es que los pares de nombre-valor se comunican desde el navegador al servidor web incluido en el encabezado de solicitud HTTP que no es de fácil acceso. La única forma de lograr el POST sin utilizar una etiqueta <form> es modificar manualmente el encabezado de solicitud HTTP y agregar los pares nombre-valor en usted.

También tenga en cuenta que un servidor HTTP no sabe intrínsecamente si una solicitud (GET o POST) provino de una ventana principal del navegador o una llamada AJAX. De todos modos, el servidor web leerá la solicitud, descifrará si es una solicitud GET o POST, buscará pares de nombre-valor según corresponda y generará una respuesta.

Si desea obtener más información sobre cómo formatear correctamente una solicitud POST, puede ingresar al jmarshall.com/easy/http/ o quizás al tcpipguide.com/free/t_HTTPRequestMessageFormat.htm. El recurso definitivo es siempre el W3C, pero a veces las RFC pueden ser terriblemente confusas para nosotros, simples mortales, para leer.

0

Por supuesto, siempre puede hacer un GET a una página que contenga lógica del lado del servidor (o AJAX) que creará una solicitud POST (por ejemplo, GET /pageWhichCreatesAPost.py). Muy complicado, por supuesto, pero puede haber casos en que tal solución podría ser útil.

+0

Esto es exactamente lo que escribí hace 1 hora: P –

Cuestiones relacionadas