65 votes

Affichage de données binaires avec curl

En gros, j'essaie d'écrire une série de scripts pour interagir avec Dot Net Nuke. J'ai analysé le trafic et je peux maintenant me connecter et effectuer quelques tâches de base. Cependant, je n'ai jamais géré le téléchargement de fichiers binaires avec curl. Quelqu'un serait-il prêt à examiner ce problème pour m'aider ? Voici l'anatomie de la demande :

http://pastebin.com/qU8ZEMaQ

Voici ce que j'ai obtenu pour les boucles jusqu'à présent :

http://pastebin.com/LG2ubFZG

edit : Pour les paresseux -

la longueur du fichier est atteinte et stockée dans LENGTH
STUFF est juste un copier/coller de l'URL de la demande avec les paramètres, sans l'URL elle-même.

curl -L --cookie ~/.cms --data-binary "@background.jpg" \
--header "Content-Length: $LENGTH" \
--header "Content-Disposition: form-data" \
--header "name=\"RadFileExplorer1_upload1file0\"" \
--header "Content-Type: image/jpg" \
--header "Filename=\"background.jpg\"" \
--data $STUFF \
--referer "Kept-Secret" \
"Kept-Secret"

91voto

gavenkoa Points 6974

Vous n'avez pas besoin --header "Contenu-Longueur : $LENGTH" .

curl --request POST --data-binary "@template\_entry.xml" $URL

Notez que la requête GET ne prend pas en charge le corps du contenu. largement .

Rappelez-vous également que les requêtes POST ont deux schémas de codage différents. Voici le premier formulaire :

  $ nc -l -p 6666 &
  $ curl  --request POST --data-binary "@README" http://localhost:6666

POST / HTTP/1.1
User-Agent: curl/7.21.0 (x86\_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6
Host: localhost:6666
Accept: \*/\*
Content-Length: 9309
Content-Type: application/x-www-form-urlencoded
Expect: 100-continue

.. -\*- mode: rst; coding: cp1251; fill-column: 80 -\*-
.. rst2html.py README README.html
.. contents::

Vous demandez probablement ceci :

\-F/--form name=content
           (HTTP) This lets curl emulate a filled-in form in
              which a user has pressed the submit button. This
              causes curl to POST data using the Content- Type
              multipart/form-data according to RFC2388. This
              enables uploading of binary files etc. To force the
              'content' part to be a file, prefix the file name
              with an @ sign. To just get the content part from a
              file, prefix the file name with the symbol <. The
              difference between @ and < is then that @ makes a
              file get attached in the post as a file upload,
              while the < makes a text field and just get the
              contents for that text field from a file.

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