Проводка двоичных данных с помощью curl - PullRequest
44 голосов
/ 03 февраля 2012

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

http://pastebin.com/qU8ZEMaQ

Вот что я получил за локон:

http://pastebin.com/LG2ubFZG

edit:Для ленивых -

длина файла достигается и сохраняется в ДЛИНЕ Фигня - это просто копирование / вставка URL-адреса запроса с параметрами, за исключением самого URL-адреса.*

1 Ответ

63 голосов
/ 03 февраля 2012

Вам не нужно - заголовок "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.
...