Je peux voir que wget a une option --post-file, mais la page de manuel indique que "Wget ne prend actuellement pas en charge les données multipart/form pour la transmission de données POST; seule application/x-www-form-urlencoded Un seul de '--post-data' et '--post-file' doit être spécifié. "
Existe-t-il une méthode similaire pour télécharger des fichiers multipart/form-data?
Utilisez curl:
curl -F "file=@localfile;filename=nameinpost" url.com
Il est possible de faire cela avec wget seulement. Au moins avec la version 1.13.4 et peut-être d'autres. L'option --post-file vous permet de spécifier un fichier à envoyer, tant que le fichier postdata est construit correctement.
J'ai également testé cela avec des fichiers binaires et cela fonctionne comme prévu. Vous n'avez PAS besoin de coder le fichier en base64, mais vous devez vous assurer que votre fichier ne contient pas de limite.
La commande minimale requise pour faire ce travail serait:
wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform
et le fichier postdata devrait contenir quelque chose comme:
--FILEUPLOAD
Content-Disposition: form-data; name="comment"
I love uploading files!
--FILEUPLOAD
Content-Disposition: form-data; name="uploadFile"; filename="myfile.bin";
Content-Type: application/octet-stream
Media Type: application/octet-stream
Give me some automated file upload action!
--FILEUPLOAD--
Un certain nombre de détails sont importants ici:
Je pensais que cela pourrait aider quelqu'un puisque certains environnements contrôlés ont wget mais pas curl.