2012-02-03 4 views
23

Fondamentalmente, sto provando a scrivere una serie di script per interagire con Dot Net Nuke. Ho analizzato il traffico e ora posso accedere e svolgere alcune attività di base. Tuttavia, non ho mai gestito il caricamento di file binari con curl. Qualcuno sarebbe disposto a guardare questo per darmi una mano? Ecco l'anatomia della richiesta:Registrazione dati binari con arricciatura

http://pastebin.com/qU8ZEMaQ

Ecco quello che ho per il ricciolo finora:

http://pastebin.com/LG2ubFZG

edit: Per i più pigri -

lunghezza del il file viene raggiunto e archiviato in LENGTH Bullshit è solo una copia/incolla dell'URL della richiesta con parametri, meno l'URL stesso.

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 $BULLSHIT \ 
--referer "Kept-Secret" \ 
"Kept-Secret" 

risposta

46

Non è necessario --header "Content-Length: $ LUNGHEZZA".

Prendiamo ad esempio per Google ad esempio:

http://code.google.com/apis/gdata/articles/using_cURL.html#creating-entries

 
curl --request POST --data-binary "@template_entry.xml" $URL 

Nota che GET richiesta non supporta il trasferimento di dati.

Ricordare inoltre che la richiesta POST ha 2 schemi di codifica diversi. Questo è il primo modulo:

 
    $ 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:: 

Probabilmente richiesto questa:

 
-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. 
+0

Grazie per la risposta. Sfortunatamente, niente riesce a succedere. Sarebbe possibile per te dare una rapida occhiata all'anatomia del post? Come aggiungerebbe qualcosa come: '------ WebKitFormBoundarymXQVUy6BiZBV3AxA Content-Disposition: form-data; name = "RadFileExplorer1 $ currentFolder" /Portali/0/Immagini/Test/'comando di arricciatura? Sarebbe tramite intestazione? O dal momento che ha un nome sarebbe tramite i normali dati di post? –

+0

Come ricordo correttamente per la richiesta POST esiste uno schema di codifica diverso (potrebbe essere quello di gestire il tag html FORM ??). – gavenkoa

+0

Bene normalmente con curl si può dire qualcosa come curl -d "username = cheese & password = 123456" , ma sembra anche drasticamente diverso quando lo controllo con Chrome/Firebug. Certamente non vedo Content-Disposition tra le altre cose. Non so se ci deve essere una versione speciale dei dati POST quando si inviano dati in chiaro e binari. –