Comment forcez-vous un navigateur web à utiliser POST lors de l'obtention d'une url?

Comment forcez-vous un navigateur web à utiliser POST lors de l'obtention d'une url?

34
demandé sur Asaph 2009-10-30 20:22:21

11 réponses

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 aviez pour que cela se produise en tant que lien( non recommandé), vous pourriez avoir un gestionnaire onclick dynamiquement construire un formulaire et le soumettre.

<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 l'appliquer côté serveur, vous devez vérifier la méthode HTTP et si elle n'est pas égale à POST, envoyez un code de réponse HTTP 405 (Méthode non autorisée) au navigateur et quittez. Exactement comment vous implémentez cela dépendra de votre langage de programmation/cadre, etc.

29
répondu Asaph 2009-10-30 18:12:17
<form method="post">

Si vous obtenez une URL, vous L'Obtenez, ne la publiez pas. Vous ne pouvez certainement pas amener un navigateur à émettre une demande de publication via sa barre d'emplacement.

20
répondu Jonathan Feinberg 2009-10-30 17:24:46

J'ai le sentiment de votre question que vous espériez simplement envoyer une requête post dans la barre d'adresse d'un navigateur.

Tapez simplement ce qui suit dans la barre d'adresse en échangeant la valeur pour 'action' à l'url que vous aimez.

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

C'est du html invalide, mais le navigateur (au moins tous ceux que je l'ai testé jusqu'à présent) sait ce que vous voulez dire, et je voulais le garder aussi court que possible.

Si vous souhaitez publier des valeurs, ajoutez autant d'entrées que vous le souhaitez, en échangeant le nom et la valeur dans chaque entrée pour 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 histoire
  • votre barre d'adresse
  • la saisie semi-automatique de votre navigateur.
  • peut-être d'autres sites que vous visitez à partir du même onglet
  • probablement beaucoup d'autres choses aussi

C'est une très mauvaise façon d'envoyer une requête post, et toutes les autres réponses sont beaucoup mieux, mais c'est toujours aussi cool que vous pouvez faire il.

10
répondu Ryan White 2015-12-20 20:35:36

Si vous essayez de tester quelque chose, je vous suggère d'utiliser Fiddler pour créer vos requêtes http. Il 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 demande très spécifique à partir d'un lien mais avec POST à la place, vous pouvez surveiller les demandes de votre navigateur et la réémettre uniquement avec l'action post modifiée.

4
répondu 2009-10-30 18:16:14

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 une extension "affiche" de chrome et mozilla

4
répondu yeakbaba 2013-05-03 14:25:49

La fonction submitAsPost () ci - dessus est une solution bonne et élégante mais elle a un problème-si L'URL est trop longue, certains navigateurs (y compris Firefox et IE) renverront une erreur. Puisque beaucoup d'entre nous utilisent POST afin de contourner cette limitation, je suggère 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.

2
répondu Gregory 2013-08-26 22:55:35

Vous pouvez utiliser un outil pour tester. Je pose toujours la même question que toi. Il y a pas mal d'outils disponibles en ligne. Voici l'outil que j'utilise: http://www.hurl.it/

2
répondu MarkZ 2014-10-24 06:05:30

Je sais que cette question Est ancienne mais quelqu'un peut trouver cela utile. Vous pouvez utiliser un outil de ligne de commande comme cURL ( http://curl.haxx.se/) pour publier sur une URL.

Exemple:

curl -v  --basic --user username:password --request POST "http://www.theurltopostto.com"
1
répondu Adam 2013-08-23 18:51:37

C'est un peu tard dans le jeu mais j'ai couru à travers cela et j'ai trouvé que HTML 5 a fait quelques changements. Vous pouvez utiliser la balise d'entrée pour ajouter formmethod (sélectionnant ainsi post). Cela a fonctionné pour moi.

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

1
répondu Rodney 2014-05-28 16:10:43

Si vous avez eu 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 faites toujours un GET alors cela signifie que votre url est au format suivant:

Http://example.com/folder

Ce qui signifie qu'il devrait être:

Http://example.com/folder/

C'est une erreur très bizarre peut-être pas liée à votre question, mais je l'ai eu plusieurs fois et il devrait être là car il semble sérieusement dangereux. Cela m'est arrivé lors de l'utilisation d'un serveur apache 2 sur Ubuntu 14.04, avec peu de configuration.

0
répondu zardilior 2016-10-09 00:08:36

L'utilitaire " Fiddler " de Telerik (free ware) vous permet de "composer" une requête http et de l'envoyer en utilisant la méthode que vous choisissez (Get, Post, Put, Del, etc) il vous donnera également des informations très détaillées sur la requête et la réponse qui peuvent être très utiles pendant les tests et le débogage

0
répondu Cos Callis 2018-07-19 18:30:08