Question

Comment forcer un navigateur Web à utiliser POST pour obtenir une URL?

Était-ce utile?

La solution

Utilisez un formulaire HTML qui spécifie post comme méthode:

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

Si vous devez le créer en tant que lien (non recommandé), vous pouvez faire en sorte qu'un gestionnaire onclick crée un formulaire de manière dynamique et le soumette.

<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 vous devez appliquer cela au serveur, vérifiez la méthode HTTP et, si elle n’est pas équivalente à POST, envoyez un Code de réponse HTTP 405 (méthode non autorisée) dans le navigateur et quitte. Cela dépendra de votre langage / programme de programmation, etc.

Autres conseils

<form method="post">

Si vous obtenez une URL, vous l’obtenez, et non pas le poster. Vous ne pouvez certainement pas obliger un navigateur à envoyer une demande POST via sa barre d’emplacement.

J'ai l'impression que, d'après votre question, vous espériez juste envoyer une demande de publication dans la barre d'adresse du navigateur.

Il vous suffit de saisir ce qui suit dans la barre d'adresse en remplaçant la valeur "action" par l'URL souhaitée.

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

Le code HTML n'est pas valide, mais le navigateur (du moins tous ceux que j'ai testés jusqu'à présent) sait ce que vous voulez dire, et je voulais le garder aussi bref que possible.

Si vous souhaitez publier des valeurs, ajoutez autant d'entrées que vous le souhaitez, en remplaçant le nom et la valeur de chaque entrée par ce que vous voulez.

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

Il est important de noter que les informations sensibles que vous publiez seront visibles dans:

  • votre historique
  • votre barre d'adresse
  • la saisie semi-automatique de votre navigateur.
  • éventuellement d'autres sites que vous visitez à partir du même onglet
  • probablement beaucoup d'autres choses aussi

C’est un très mauvais moyen d’envoyer une demande de publication. Toutes les autres réponses sont bien meilleures, mais c’est quand même bien que vous puissiez le faire.

Si vous essayez de tester quelque chose, je vous suggère d'utiliser Fiddler pour créer vos requêtes http. . Cela vous permettra de spécifier le verbe d'action (GET, POST, PUT, DELETE, etc.) ainsi que le contenu de la requête. Si vous essayez de tester une requête très spécifique à partir d'un lien mais avec POST à ??la place, vous pouvez alors surveiller les requêtes de votre navigateur et la relâcher uniquement avec l'action POST modifiée.

vous ne pouvez forcer aucun navigateur Web à envoyer l'URL avec l'en-tête POST. Mais pour tester une URL de requête POST, je peux suggérer "POSTER". extension de chrome et mozilla

La fonction submitAsPost () ci-dessus est une solution bonne et élégante, mais elle pose un problème - si l'URL est trop longue, certains navigateurs (y compris Firefox et IE) renverront une erreur. Étant donné que beaucoup d’entre nous utilisent POST pour contourner cette limitation, je propose cette solution:

// 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);
}

Testé avec Firefox, Chrome et IE.

Vous pouvez utiliser un outil pour tester. Je pose toujours la même question que vous. Il existe de nombreux outils disponibles en ligne. Voici l'outil que j'utilise: http://www.hurl.it/

Je sais que cette question est ancienne, mais cela peut être utile pour quelqu'un. Vous pouvez utiliser un outil de ligne de commande tel que cURL ( http://curl.haxx.se/ ) pour envoyer des messages à une URL.

Exemple:

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

C’est un peu tard dans le jeu, mais j’ai vu cela et constaté que HTML 5 avait apporté quelques modifications. Vous pouvez utiliser la balise input pour ajouter une méthode de calcul (en sélectionnant ainsi post). Cela a fonctionné pour moi.

voir: http://www.w3schools.com/tags/att_input_formmethod.asp"a >

Si vous aviez le problème de faire:

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

et dans les outils de développement, vous avez toujours l'impression qu'il s'agit d'une opération GET, ce qui signifie que votre URL est au format suivant:

http://example.com/folder

Cela signifie que cela devrait être:

http://example.com/folder/

C’est une erreur très bizarre qui n’est peut-être pas liée à votre question, mais je l’ai eue plusieurs fois et elle devrait être diffusée car elle semble sérieusement dangereuse. C'est ce qui m'est arrivé lors de l'utilisation d'un serveur Apache 2 sous Ubuntu 14.04, avec peu de configuration.

L'utilitaire " Fiddler " par Telerik (freeware) vous permet de & composer; composer " une requête http et envoyez-la en utilisant la méthode de votre choix (Get, Post, Put, Del, etc.). Elle vous donnera également des informations très détaillées sur la requête et la réponse qui peuvent être très utiles lors des tests et du débogage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top