2012-02-03 18 views
23

Tak więc, w zasadzie próbuję napisać serię skryptów do interakcji z Dot Net Nuke. Analizowałem ruch i mogę się teraz zalogować i wykonać kilka podstawowych zadań. Jednak nigdy nie zajmowałem się przesyłaniem plików binarnych z zawijaniem. Czy ktoś mógłby na to spojrzeć, żeby mi pomóc? Oto anatomia wniosek:Publikowanie danych binarnych z lokami

http://pastebin.com/qU8ZEMaQ

Oto co mam do zawinięcia do tej pory:

http://pastebin.com/LG2ubFZG

edit: dla leniwych -

długość składu Plik jest osiągnięty i przechowywany w DŁUGOŚCI Bullshit to tylko kopiowanie/wklejanie adresu URL żądania z parametrami, bez samego adresu URL.

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" 

Odpowiedz

46

Nie trzeba --header "Content-Length: $ długość".

Spójrz na przykład na przykład Google:

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

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

Zauważ, że żądanie GET nie obsługuje przesyłania danych.

Pamiętaj również, że żądanie POST ma 2 różne schematy kodowania. Jest to pierwsza forma:

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

Prawdopodobnie zażądać to:

 
-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

Dzięki za odpowiedź. Niestety nic się nie dzieje. Czy możesz rzucić okiem na anatomię postu? W jaki sposób dodać coś w rodzaju: '------ WebKitFormBoundarymXQVUy6BiZBV3AxA Content-Disposition: form-data; name = "RadFileExplorer1 $ currentFolder" /Portale/0/Images/Test/'to curl command? Czy to przez nagłówek? A skoro ma imię, to czy będzie to zwykłe dane pocztowe? –

+0

Jak pamiętam, dla żądania POST istnieje inny schemat kodowania (może to być zarządzanie tagiem HTML FORMULARNY?). – gavenkoa

+0

Zwykle z curl można powiedzieć coś w stylu curl -d "nazwa_użytkownika = sery & hasło = 123456" , ale wygląda również drastycznie inaczej, gdy sprawdzam go za pomocą Chrome/Firebug. Z pewnością nie widzę między innymi tego, w jaki sposób należy się do dyspozycji. Nie wiem, czy wymagana jest specjalna wersja danych POST podczas przesyłania tekstu jawnego i danych binarnych. –

Powiązane problemy