web-dev-qa-db-fra.com

Comment envoyer des requêtes GET et POST à l'aide de Curl?

Comment envoyer des demandes GET et POST avec le paramètre gimmeflag et la valeur please à l'URL http://103.200.7.150:7777/ à l'aide de curl sur la ligne de commande?

1
raka widiana

On dirait que vous suivez un tutoriel ou un livre et que c'est un moyen effronté de tester si vous maîtrisez les bases.

L'appel http://103.200.7.150:7777/ via curl ou un navigateur génère le résultat suivant:

S'il vous plaît, envoyez-moi la méthode de requête GET et POST avec les paramètres "gimmeflag" et la valeur "please"

Décomposons-le en deux parties puisque vous voulez savoir comment cela fonctionne avec curl (voir man 1 curl ou le curl manuel ).

Utilisation de GET pour envoyer votre demande:

Celui-ci est assez facile si vous savez à quoi ressemble query-string .

Sur le Web, une chaîne de requête est la partie d'un localisateur de ressources uniforme (URL) contenant des données qui ne s'intègrent pas facilement dans une structure de chemin d'accès hiérarchique. La chaîne de requête comprend généralement des champs ajoutés à une URL de base par un navigateur Web ou une autre application cliente, par exemple dans le cadre d'un formulaire HTML.

Un serveur Web peut gérer une demande de protocole de transfert hypertexte en lisant un fichier à partir de son système de fichiers en fonction du chemin de l'URL ou en traitant la demande à l'aide d'une logique propre au type de ressource. Dans les cas où une logique spéciale est invoquée, la chaîne de requête sera disponible pour cette logique afin de l'utiliser dans son traitement, avec le composant de chemin d'accès de l'URL. ( source )

Vous souhaitez envoyer un paramètre gimmeflag et une valeur please. Donc, la ligne que vous voulez demander avec curl est:

_curl -X GET http://103.200.7.150:7777/?gimmeflag=please
_

Le résultat que vous recevez du serveur:

KSL {n0w_y0u_Know_How_To

Utilisation de POST pour envoyer votre demande:

Étant donné la ligne GET, le POST est assez simple, il suffit de remplacer GET par POST:

_curl -X POST http://103.200.7.150:7777/?gimmeflag=please
_

Le résultat que vous recevez du serveur:

_S3nD_r3quesT_Meth0d_GET_AND_POST}

Pour conclure ceci:

_# Thanks to @pa4080 for this line
printf '%s%s\n' \
"$(curl -X GET http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)" \
"$(curl -X POST http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)"
_

KSL {n0w_y0u_Know_How_To_S3nD_r3quesT_Meth0d_GET_AND_POST}

5
Videonauth

Cette réponse montre comment obtenir les résultats de réponse de @ Videonauth , mais avec wget:

_$ wget -qO- http://103.200.7.150:7777/ 
Please send me request method GET and POST with params "gimmeflag" and value "please"
_
_$ wget -qO- http://103.200.7.150:7777/?gimmeflag=please # GET is the default request
KSL{n0w_y0u_Know_How_To
_
_$ wget -qO- --post-data '' http://103.200.7.150:7777/?gimmeflag=please # Simple POST req.
_S3nD_r3quesT_Meth0d_GET_AND_POST}
_
_$ printf '\n%s%s\n' \
"$(wget -qO- http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)" \
"$(wget -qO- --post-data '' http://103.200.7.150:7777/?gimmeflag=please 2>/dev/null)"

KSL{n0w_y0u_Know_How_To_S3nD_r3quesT_Meth0d_GET_AND_POST}
_

De man wget :

_-O file; --output-document=file - The documents will not be written to the appropriate 
     files, but all will be concatenated together and written to file. If '-' is used 
     as file, documents will be printed to standard output, disabling link conversion...

-q; --quiet - Turn off Wget's output.

--post-data=string; --post-file=file - Use POST as the method for all HTTP requests 
     and send the specified data in the request body. --post-data sends string as data, 
     whereas --post-file sends the contents of file. Other than that, they work in 
     exactly the same way. In particular, they both expect content of the form 
     "key1=value1&key2=value2", with percent-encoding for special characters... 
     Only one of --post-data and --post-file should be specified... This example shows 
     how to log in to a server using POST and then proceed to download the desired pages, 
     presumably only accessible to authorized users:

         # Log in to the server.  This can be done only once.
         wget --save-cookies cookies.txt --post-data 'user=foo&password=bar' \
         http://example.com/auth.php
_
2
pa4080

Je réponds ici parce que je n'ai pas assez de rep pour commenter. Il y a deux réponses et la réponse la plus votée ne connaît pas le fonctionnement du protocole HTTP.

Les données POST voyagent dans le corps de la charge HTTP, pas dans l'URL. Une chaîne de requête dans l'URL est simplement une astuce pour envoyer des données via GET qui n'est pas une action effectuée pour enregistrer des données (GET et POST s'expliquent d'eux-mêmes).

La façon correcte d’utiliser curl avec POST serait:

curl -X POST -d "gimmeflag=please" http://103.200.7.150:7777/

Si l'on teste un script implémenté dans un langage dans lequel les variables GET et POST sont séparées, curl -X POST http://103.200.7.150:7777/?gimmeflag=please stockera les variables dans lesquelles les variables GET sont trouvées.

1
Braulio J. Solano