早上好。
我正在使用Echonest API开发一个内置支持音频识别的小型媒体播放器。我以前处理过API并且知道如何提交和解析结果,但是其他API在他们的文档中提供了简单的POST/GET
示例,因此无论语言或平台如何,都可以将其打开。
然而,Echonest API仅提供CURL示例。 CURL是我从未处理过的事情。我在Delphi XE3
或Firemonkey 2
工作是具体的,因此没有内置的CURL库或组件。有一些第三方可用,但我不相信他们是最新的,因为他们将Delphi 6列为他们的开发环境,并且简短的搜索表明他们不再使用现代版本的Delphi (这是否真实是一个不同的故事)。
因为我想尽可能地保持跨平台的东西,以便在将来的某个日期编译OS X
版本,并且对处理POST
和{{1}有信心我已经如何将这个CURL命令“转换”为GET
可以使用的东西(例如);
Indy
这是直接从他们的API documentation获取的,用于将曲目上传到他们的服务。
我不确定有关CURL的细节,所以在我将服务中的随机数据投入之前,我觉得最好看看SO社区是否可以提供一个简短的解释和我可以使用的例子。在任何情况下,这个解释都比这个例子更有价值,但是一个例子可能适用于碰巧遇到类似问题的其他人。
此致 Scott Pritchard。
答案 0 :(得分:3)
-F
选项使用HTTP POST
Content-Type告诉curl "multipart/form-data"
提供的数据,在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--
Indy的Post()
组件的TIdHTTP
方法通过TIdMultipartFormDataStream
实用程序类实现Content-Type,例如:
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;