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 "track=@audio.mp3" "http://developer.echonest.com/api/v4/track/upload"
Это было взято непосредственно из их документации API и используется для загрузки трека в их сервис.
Я не уверен в деталях, касающихся CURL, и поэтому, прежде чем отправлять случайные данные в службу, я решил, что лучше всего посмотреть, сможет ли сообщество SO дать краткое объяснение и пример, с которым я могу работать. В любом случае объяснение гораздо более ценно, чем пример, но пример может быть полезен для всех, кто сталкивается с подобной проблемой.
С уважением, Скотт Притчард.
1 ответ
-F
опция говорит завиток 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()
метод Инди 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;