86 votes

Post request with Wget ?

Je veux utiliser wget pour télécharger une image vers un serveur distant, en utilisant un jeton d'authentification, 'AUTH_1624582364932749DFHDD', dans le dossier 'test'.

Cette commande ne fonctionne pas (l'autorisation a échoué), et je veux m'assurer qu'il ne s'agit pas d'un problème de syntaxe :

wget --post-file=nature.jpg http://ipadress:8080/v1/AUTH_test/test/ --post-data="AUTH_1624582364932749DFHDD"

Des suggestions ?

117voto

Maxime Points 3643

Wget ne prend actuellement pas en charge les données "multipart/form-data". --post-file ne permet pas de transmettre des fichiers en tant que pièces jointes à un formulaire, il attend des données avec le formulaire : key=value&otherkey=example . Il est en fait possible de poster d'autres formats (json) si vous envoyez l'en-tête correspondant.

--post-data y --post-file fonctionnent de la même manière : la seule différence est que les --post-data vous permet de spécifier les données dans la ligne de commande, tandis que --post-file permet de spécifier le chemin d'accès au fichier contenant les données à envoyer.

Voici la documentation :

 --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; the only difference is that one expects its content as a
           command-line parameter and the other accepts its content from a file. In
           particular, --post-file is not for transmitting files as form
           attachments: those must appear as "key=value" data (with appropriate
           percent-coding) just like everything else. Wget does not currently
           support "multipart/form-data" for transmitting POST data; only
           "application/x-www-form-urlencoded". Only one of --post-data and
           --post-file should be specified.

En ce qui concerne votre jeton d'authentification, il doit être fourni soit dans l'en-tête, soit dans le chemin de l'url, soit dans les données elles-mêmes. Cela doit être indiqué quelque part dans la documentation du service que vous utilisez. Dans une requête POST, comme dans une requête GET, vous devez spécifier les données à l'aide de clés et de valeurs. De cette manière, le serveur pourra recevoir plusieurs informations avec des noms spécifiques. C'est la même chose avec les variables.

Par conséquent, vous ne pouvez pas vous contenter d'envoyer un jeton magique au serveur, vous devez également spécifier le nom de la clé. Si la clé est "token", alors elle doit être token=YOUR_TOKEN .

wget --post-data 'user=foo&password=bar' http://example.com/auth.php

De plus, vous devriez envisager d'utiliser curl si vous le pouvez, car il est plus facile d'envoyer des fichiers. Il existe de nombreux exemples sur l'internet à ce sujet.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X