web-dev-qa-db-fra.com

Poster une demande avec Wget?

Je souhaite utiliser wget pour télécharger une image sur un serveur distant, à l'aide d'un jeton d'authentification, "AUTH_1624582364932749DFHDD", dans le dossier "test".

Cette commande ne fonctionne pas (échec de l'autorisation) et je veux m'assurer qu'il ne s'agit pas de syntaxe:

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

Aucune suggestion?

54
Dady

Wget ne prend actuellement en charge que les données x-www-form-urlencoded. --post-file ne permet pas de transmettre des fichiers en tant que pièces jointes à un formulaire. Il attend des données sous la forme: key=value&otherkey=example.

--post-data et --post-file fonctionnent de la même manière: la seule différence est que --post-data vous permet de spécifier les données dans la ligne de commande, tandis que --post-file vous permet de spécifier le chemin de le 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 dans l’en-tête, dans le chemin de l’url ou dans les données elles-mêmes. Cela doit être indiqué quelque part dans la documentation du service que vous utilisez. Dans une demande POST, comme dans une demande GET, vous devez spécifier les données à l'aide de clés et de valeurs. De cette façon, le serveur pourra recevoir plusieurs informations avec des noms spécifiques. C'est similaire avec les variables.

Par conséquent, vous ne pouvez pas simplement envoyer un jeton magique au serveur, vous devez également spécifier le nom de la clé. Si la clé est "jeton", alors il devrait s'agir de token=YOUR_TOKEN.

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

En outre, vous devriez envisager d’utiliser curl si vous le pouvez car il est plus facile d’envoyer des fichiers en l’utilisant. Il existe de nombreux exemples sur Internet pour cela.

74
Maxime Chéramy