2012-02-03 2 views
23

Так что, в основном, я пытаюсь написать серию сценариев для взаимодействия с Dot Net Nuke. Я анализирую трафик и теперь могу войти в систему и выполнить некоторые основные задачи. Тем не менее, я никогда не обрабатывал загрузку двоичного файла с помощью curl. Кто-нибудь захочет посмотреть на это, чтобы помочь мне? Вот анатомия запроса:Запись двоичных данных с помощью curl

http://pastebin.com/qU8ZEMaQ

Вот что я получил за завитка до сих пор:

http://pastebin.com/LG2ubFZG

редактировать: Для ленивых -

Протяжённость файл достигнут и сохранен в LENGTH Bullshit - это просто копия/вставка URL-адреса запроса с параметрами, минус 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" 

ответ

46

Вам не нужно --header "Content-Length: $ LENGTH".

Посмотрите, например, на примере Google:

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

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

Обратите внимание, что GET запрос не поддерживает передачу данных,.

Также помните, что запрос POST имеет 2 различные схемы кодирования. Это первая форма:

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

Вы, наверное, спросите это:

 
-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

Спасибо за ответ. К сожалению, ничего не получится. Возможно ли, чтобы вы быстро взглянули на пост-анатомию? Как бы вы добавили что-то вроде: '------ WebKitFormBoundarymXQVUy6BiZBV3AxA Content-Disposition: form-data; name = "RadFileExplorer1 $ currentFolder" /Portals/0/Images/Test/'для команды curl? Будет ли это через заголовок? Или, поскольку у него есть имя, это будет через регулярные почтовые данные? –

+0

Как я правильно помню, для запроса POST существуют разные схемы кодирования (возможно, для управления тегом HTML FORM?). – gavenkoa

+0

Хорошо нормально с завитком, вы можете сказать что-то вроде curl -d "username = cheese & password = 123456" , но он также выглядит совершенно другим, когда я проверяю его с помощью Chrome/Firebug. Я, конечно же, не вижу Content-Disposition. Я не знаю, должна ли быть специальная версия данных POST, когда вы отправляете текстовые и двоичные данные. –