Comment puis-je télécharger un fichier en utilisant `curl` au lieu du formulaire?

J'ai un client dont le client utilise un centre de compensation tiers pour recevoir les factures. Nous pouvons le faire manuellement en exportant nos données au format XML, en nous rendant sur un site Web particulier et en téléchargeant le fichier. Le formulaire HTML pertinent ressemble à ceci:

<form border=0
      method="POST"
      action="/server?request=send"
      enctype="multipart/form-data"
      id="uploadform"
      name="uploadform"
      onsubmit="return checkUpload()">
  <H2>Upload</H2>
  <p>Server directory:<br>
  <input type="text"
         id="directory"
         name="directory"
         value="./"
         size="30"></p>
  <p>Local file to be uploaded:<br>
  <input type="file"
         id="file"
         name="file"
         size="40"></p>
  <p><input type="submit" value="Send"></p>
</form>

La soumission manuelle à l'aide de leur interface Web fonctionne correctement. J'essaie d'écrire un outil rapide qui nous soumet le formulaire en utilisant curl. J'ai essayé de nombreuses tentatives différentes, mais jusqu'à présent, chacune, bien que je reçoive un "fichier réponse HTML "téléchargée avec succès, le fichier qu'ils obtiennent est vide.

Nous avons commencé à essayer d'utiliser curl parce que c'est ainsi que la société clearinghouse nous a suggéré de le faire. L'exemple qu'ils ont donné était le suivant:

curl -i -k -H "Content-Type:application/octet-stream" 
  -d @test.txt -u username:password 
  https://example.com/server?request=send?filename=test.txt?directory=DX001

Lorsque cela n'a pas fonctionné, j'ai commencé à regarder le code dans le formulaire ci-dessus et j'ai essayé ce qui suit (dans le même répertoire que le fichier XML):

curl -F "request=send" -F "directory=DX001" -F "file=33823.xml" 
  -u username:password -F "enctype="multipart/form-data"" 
  -F "id="uploadform"" https://example.com/server

Quand que n'a pas fonctionné, j'ai pensé que j'essaierais le chemin absolu même si j'étais dans le même répertoire :

curl -F "request=send" -F "directory=DX001" -F "file=/Users/chuck/Desktop/33823.xml" 
  -u username:password -F "enctype="multipart/form-data"" 
  -F "id="uploadform"" https://example.com/server

Chacun d'entre eux ne télécharge qu'un fichier vide (avec le nom du fichier donné).

Comme vous pouvez probablement le voir à partir du chemin complet, je le fais à partir de macOS, au cas où cela serait pertinent.

Remarque, l'action onsubmit dans le formulaire garantit simplement que ni les entrées directory ni les entrées file ne sont vides.

demandé sur