Pregunta

¿Cómo obliga a un navegador web a usar POST cuando obtiene una URL?

¿Fue útil?

Solución

Utilice un formulario HTML que especifique la publicación como método:

<form method="post" action="/my/url/">
    ...
    <input type="submit" name="submit" value="Submit using POST" />
</form>

Si tenía para hacerlo posible como un enlace (no recomendado), podría hacer que un controlador onclick construya dinámicamente un formulario y lo envíe.

<script type="text/javascript">
function submitAsPost(url) {
    var postForm = document.createElement('form');
    postForm.action = url;
    postForm.method = 'post';
    var bodyTag = document.getElementsByTagName('body')[0];
    bodyTag.appendChild(postForm);
    postForm.submit();
}
</script>
<a href="/my/url" onclick="submitAsPost(this.href); return false;">this is my post link</a>

Si necesita aplicar esto en el lado del servidor, debe verificar el método HTTP y si no es igual a POST, envíe un código de respuesta HTTP 405 (método no permitido) de regreso al navegador y salir. Exactamente cómo implemente eso dependerá de su lenguaje / marco de programación, etc.

Otros consejos

<form method="post">

Si RECIBE una URL, la RECIBE, no la PUBLICA. Ciertamente no puede hacer que un navegador emita una solicitud POST a través de su barra de ubicación.

Tengo la impresión de que su pregunta era que solo esperaba enviar una solicitud de publicación en la barra de direcciones de un navegador.

Simplemente escriba lo siguiente en la barra de direcciones intercambiando el valor de 'acción' a la url que desee.

data:text/html,<body onload="document.body.firstChild.submit()"><form method="post" action="http://stackoverflow.com">

No es válido html, pero el navegador (al menos todos los que lo he probado hasta ahora) saben a qué te refieres, y quería mantenerlo lo más breve posible.

Si desea publicar valores, agregue tantas entradas como desee, intercambiando nombre y valor en cada entrada por lo que quiera.

<input value="hugh.mahn@person.com" name="email">
<input value="passwordsavedinhistory" name="password">

Es importante tener en cuenta que la información confidencial que publique será visible en:

  • tu historia
  • su barra de direcciones
  • el autocompletado de su navegador.
  • posiblemente otros sitios que visite desde la misma pestaña
  • probablemente muchas otras cosas también

Es una forma realmente mala de enviar una solicitud de publicación, y todas las demás respuestas son mucho mejores, pero aún así es genial que pueda hacerlo.

Si está intentando probar algo, le sugiero que use Fiddler para elaborar sus solicitudes http . Le permitirá especificar el verbo de acción (GET, POST, PUT, DELETE, etc.), así como los contenidos de la solicitud. Si está intentando probar una solicitud muy específica desde un enlace pero con POST, puede monitorear las solicitudes que realiza su navegador y volver a emitirla solo con la acción POST modificada.

no puede forzar a ningún navegador web a enviar la url con el encabezado POST. Pero para probar una URL de solicitud POST, puedo sugerir " POSTER " extensión de cromo y mozilla

La función submitAsPost () anterior es una solución buena y elegante, pero tiene un problema: si la URL es demasiado larga, algunos navegadores (incluidos Firefox e IE) devolverán un error. Dado que muchos de nosotros usamos POST para evitar esta limitación, sugiero esta solución:

// submit a URL using post
function submitAsPost(url) {
    var bodyTag = document.getElementsByTagName('body')[0];
    var postForm = document.createElement('form');
    bodyTag.appendChild(postForm);
    postForm.method = 'POST';

    var serverAndParams = url.split("?");
    postForm.action = serverAndParams[0];
    var params = null;
    try
    {
      var paramsAndHash = serverAndParams[1].split("#");
      params = paramsAndHash[0]; 
      var attrList = params.split("&");
      for (var i = 0; i < attrList.length; i++)
      {
        try
        {
          var keyValue = attrList[i].split("=");
          var el = document.createElement('input');
          el.type="hidden";
          el.name=keyValue[0];
          var value = keyValue[1];
          value = value.replace(/\+/g, ' ');
          el.value=decodeURIComponent(value);
          postForm.appendChild(el);
        }
        catch(error){}
      } 
    }
    catch(error){}

    postForm.submit();
    bodyTag.removeChild(postForm);
}

Probado con Firefox, Chrome e IE.

Puede usar una herramienta para probar. Siempre hago la misma pregunta que tú. Hay bastantes herramientas disponibles en línea. Aquí está la herramienta que uso: http://www.hurl.it/

Sé que esta pregunta es antigua pero alguien puede encontrarla útil. Puede usar una herramienta de línea de comando como cURL ( http://curl.haxx.se/ ) para publicar en una URL.

Ejemplo:

curl -v  --basic --user username:password --request POST "http://www.theurltopostto.com"

Esto es un poco tarde en el juego, pero me encontré con esto y descubrí que HTML 5 hizo algunos cambios. Puede usar la etiqueta de entrada para agregar el método de formulario (seleccionando así la publicación). Esto funcionó para mí.

ver: http://www.w3schools.com/tags/att_input_formmethod.asp

Si tuvo el problema de hacer:

request.open('POST',url,true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send("data="+JSON.stringify(data));

y en las herramientas de desarrollo sigues viendo que está haciendo un GET, entonces eso significa que tu url está en el siguiente formato:

http://example.com/folder

Lo que significa que debería ser:

http://example.com/folder/

Es un error muy extraño que tal vez no esté relacionado con su pregunta, pero lo he tenido un par de veces y debería estar ahí, ya que parece muy peligroso. Esto me sucedió cuando usaba un servidor apache 2 en Ubuntu 14.04, con poca configuración.

La utilidad " Fiddler " by Telerik (software gratuito) le permite "componer" una solicitud http y enviarla utilizando cualquier método que elija (Obtener, Publicar, Poner, Eliminar, etc.) También le dará información muy detallada sobre la solicitud y la respuesta que puede ser muy útil durante las pruebas y la depuración

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top