CURL как простая строка URL

Доброе утро.

Я разрабатываю небольшой медиаплеер со встроенной поддержкой распознавания звука с помощью Echonest API. Я имел дело с API раньше и знаю, как отправлять и анализировать результаты, но другие API предоставили простые POST/GET примеры в своей документации, что открывает его практически для любой ситуации, независимо от языка или платформы.

Однако Echonest API предоставляет только примеры CURL. CURL — это то, с чем я никогда не сталкивался. Я работаю в Delphi XE3 или Firemonkey 2, если быть точным, и поэтому нет встроенной библиотеки или компонентов CURL. Доступно несколько сторонних, но я не уверен, что они обновлены, поскольку они указывают Delphi 6 как свою среду разработки, а краткий поиск показывает, что они больше не работают с современными версиями Delphi. (правда это или нет - отдельная история).

Поскольку я хочу попытаться сохранить все как можно более кросс-платформенным, чтобы потенциально скомпилировать версию OS X в будущем, и чувствовать себя уверенно в работе с POST и GET, как я могу «перевести» эту команду CURL в что-то, что я мог бы использовать с Indy (например);

curl -F "api_key=FILDTEOIK2HBORODV" -F "filetype=mp3" -F "[email protected]" "http://developer.echonest.com/api/v4/track/upload"

Это было взято непосредственно из их документации по API и используется для загрузки отследить их обслуживание.

Я не уверен в деталях, касающихся CURL, и поэтому, прежде чем я отправлюсь в службу случайных данных, я счел за лучшее посмотреть, может ли сообщество SO дать краткое объяснение и пример, с которым я могу работать. Объяснение гораздо ценнее примера в любом случае, но пример может сослужить хорошую службу любому, кто случайно наткнется на подобную проблему.

С уважением, Скотт Притчард.


person Scott P    schedule 06.01.2013    source источник


Ответы (1)


Параметр -F сообщает curl POST предоставленные данные с использованием HTTP "multipart/form-data" Content-Type, который выглядит на уровне HTTP следующим образом:

POST /api/v4/track/upload HTTP/1.1
Host: developer.echonest.com
Content-Type: multipart/form-data; boundary="boundaryvalue"

--boundaryvalue
Content-Disposition: form-data; name="api_key"

FILDTEOIK2HBORODV
--boundaryvalue
Content-Disposition: form-data; name="filetype"

mp3
--boundaryvalue
Content-Disposition: form-data; name="track"; filename="audio.mp3"
Content-Type: audio/x-mpg

<binary audio data here>
--boundaryvalue--

Метод Post() компонента Indy TIdHTTP реализует этот Content-Type через служебный класс TIdMultipartFormDataStream, например:

uses
  ..., IdHTTP, IdMultipartFormData;

var
  Data: TIdMultipartFormDataStream;
begin
  Data := TIdMultipartFormDataStream.Create;
  try
    Data.AddFormField('api_key', 'FILDTEOIK2HBORODV');
    Data.AddFormField('filetype', 'mp3');
    Data.AddFile('track', 'C:\path to\audio.mp3');
    IdHTTP1.Post('http://developer.echonest.com/api/v4/track/upload', Data);
  finally
    Data.Free;
  end;
end;
person Remy Lebeau    schedule 06.01.2013