web-dev-qa-db-fra.com

Est-ce que le seul moyen de passer des paramètres POST en HTML via un formulaire?)

En HTML, vous pouvez envoyer des données d'une page à une autre à l'aide d'une requête GET de plusieurs manières:

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

...ou...

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

Avec une requête POST cependant, je n'ai vu que des données envoyées via des éléments de formulaire comme celui-ci:

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

Si je n'ai qu'un seul paramètre que je souhaite envoyer à une autre page à l'aide de POST, existe-t-il un moyen plus simple que de l'envelopper dans un formulaire?

24
Philip Morton

Il n'y a que deux façons de POST depuis un navigateur - un formulaire, ou une requête Ajax .

31
Greg

En utilisant uniquement HTML, un formulaire est le seul moyen de générer une requête POST. Vous pouvez utiliser le script côté serveur/Javascript pour générer des requêtes POST) d'une autre manière, mais pas d'autres moyens de faire uniquement avec du HTML brut.

7
Eran Galperin

Comme vous l'avez déjà découvert, il existe exactement deux façons de transmettre des données via le protocole http: GET ou POST. Il existe également un troisième type de message HTTP appelé HEAD, mais qui n'est vraiment utilisé que pour obtenir les métadonnées autour d'une ressource sans la télécharger et n'est pas largement implémenté.

De toute évidence, GET et POST sont facilement accessibles grâce à l'utilisation d'un <form> tag. Le GET est également facilement accessible en ajoutant manuellement des paramètres de requête à l'URL sous la forme de paires nom-valeur (foo.html?a=1&b=2).

La beauté et la complexité de POST, cependant, est que les paires nom-valeur sont communiquées du navigateur au serveur Web inclus dans l'en-tête de la requête HTTP qui n'est pas aussi facilement accessible. La seule façon d'accomplir le POST sans utiliser un <form> balise consiste à modifier manuellement l'en-tête de la requête HTTP et à ajouter les paires nom-valeur en vous-même.

Gardez également à l'esprit qu'un serveur HTTP ne sait pas intrinsèquement si une requête (GET ou POST) provient d'une fenêtre principale du navigateur ou d'un appel AJAX Quoi qu'il en soit, le serveur Web lira la requête, déchiffrera s'il s'agit d'une requête GET ou POST, recherchera les paires nom-valeur selon le cas et générera une réponse.

Si vous souhaitez des détails supplémentaires sur la façon de formater correctement une requête POST, vous pouvez aller à jmarshall.com/easy/http/ ou peut-être tcpipguide.com/free /t_HTTPRequestMessageFormat.htm . La ressource définitive est toujours le W3C , mais parfois les RFC peuvent être terriblement déroutants pour nous simples mortels à lire.

4
Ed Lucas

En HTML seulement, c'est avec un formulaire.

Mais vous pouvez le faire si vous jouez avec votre côté serveur. Voici un bon article qui vous montre comment manipuler le Get to Change it to Post via PHP. Cela vous obligera à jouer avec fsockopen ... Cette façon de faire utilisera votre paramètre? Id = 1 & param = 2 ... et créera une requête POST côté serveur. peut le rendre générique, une fois installé, cela fonctionnera, mais c'est un peu de travail pour tout configurer en premier.

2
Patrick Desjardins

Vous pouvez bien sûr toujours faire un GET sur une page qui contient une logique côté serveur (ou AJAX) qui créera une requête POST) (par exemple GET /pageWhichCreatesAPost.py). Très désordonné bien sûr, mais il peut y avoir des cas où une telle solution de contournement pourrait être utile.

0
LudoA