Il est possible de le faire uniquement avec wget. 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 en base64 le fichier, mais vous devez vous assurer que votre fichier ne contient pas la 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:
- Les lignes du fichier de données de publication se terminent par \ r \ n. La seule exception concerne les données dans le contexte du fichier.
- Chaque attribut BOUNDARY dans les postdata doit correspondre à la valeur BOUNDARY dans l'appel à wget. (FILEUPLOAD dans l'exemple)
- Toutes les limites sont préfixées par deux tirets "-" et terminées par \ r \ n
- La dernière limite est suffixée avec deux tirets supplémentaires "-" et se termine par \ r \ n
- Chaque donnée, contenu de fichier ou valeur de paramètre, est entourée d'une ligne vide "\ r \ n"
Je pensais que cela pourrait aider quelqu'un, car certains environnements contrôlés ont wget mais pas curl.
cat pic.jpg >> postdata
, chargé dans Notepad ++ et ajouté la dernière limite + '-' + EOL. Référence W3C