Perl WebService::Soundcloud-如何在上传到Soundcloud时传递曲目参数

Perl WebService::Soundcloud-如何在上传到Soundcloud时传递曲目参数,perl,soundcloud,Perl,Soundcloud,我正在尝试使用WebService::soundcloud将声音上传到soundcloud。到目前为止,我已经能够按照提供的示例发出几个GET/POST请求 然而,我在任何地方都找不到一个合适的例子来说明如何在传递所需参数的同时进行上传,例如track,以及其中的asset_数据、title e.t.c。我想知道我是否应该发送一条多部分消息 任何例子都将不胜感激 另外,这里是我迄今为止所尝试的:在验证并获得有效的WebService::Soundcloud实例之后 GET my $respons

我正在尝试使用
WebService::soundcloud
将声音上传到soundcloud。到目前为止,我已经能够按照提供的示例发出几个GET/POST请求

然而,我在任何地方都找不到一个合适的例子来说明如何在传递所需参数的同时进行上传,例如track,以及其中的asset_数据、title e.t.c。我想知道我是否应该发送一条多部分消息

任何例子都将不胜感激


另外,这里是我迄今为止所尝试的:在验证并获得有效的
WebService::Soundcloud
实例之后

GET my $response = $scloud->get( '/me/tracks' );
PUT my $response = $scloud->put( '/me/tracks/91576621', JSON::to_json({track=>{title=>"My test title",description=>"My test description"}}) );
POST my $file = '/home/ski/track1.mp3';
my $asset_data = File::Slurp::read_file( $file, binmode => ':raw' );
my $response = $scloud->post('/me/tracks', '{"track":{"title":"My test title","asset_data":"'.$asset_data.'"}}' );

由于“请求实体包含无效的字节序列。请传输有效的UTF-8”,此操作失败。

您提供的示例手动构造JSON,但未考虑文件内容的二进制性质,这意味着它不太可能工作。由于缺少转义/正确编码,它还容易受到滥用内容更改JSON的攻击

您引用的文档有一个put示例,该示例演示了需要将内容编码为JSON,然后传递到库中。我没有使用这个api,但根据示例,它可能是使用encode_json的一个简单例子。我将展示一个与手动编码等效的示例:

use JSON qw(encode_json);

my $asset_data = "ascii, quotes (\"'), non-ascii: \000\001\002\003";

my $content =  encode_json({ track => { title => "My test title",
                                    asset_data => $asset_data}});

print $content . "\n";  ### inspection of encoding
这表明JSON使用UTF-8表示来处理二进制数据:

{"track":{"asset_data":"ascii, quotes (\"'), non-ascii: \u0000\u0001\u0002\u0003","title":"My test title"}}

密钥/值在那里被重新排序,但它是等效的JSON。

验证并获取有效的
WebService::Soundcloud
实例后,您迄今为止所做的任何代码示例(例如GET/POST请求)。GET
my$response=$scloud->GET('/me/tracks')
PUT
my$response=$scloud->PUT('/me/tracks/91576621',JSON::to_JSON({track=>{title=>“我的测试标题”,description=>“我的测试描述”}))
POST
my$file='/home/ski/track1.mp3';我的$asset_data=File::Slurp::read_File($File,binmode=>':raw');my$response=$scloud->post('/me/tracks','{“track”:{“title”:“my test title”,“asset_data”:“'.$asset_data.”“}”)此操作失败,因为“请求实体包含无效的字节序列。请传输有效的UTF-8”是完整的错误消息,还是有更多错误消息?我不知道Soundcloud API,也没有使用过
WebService::Soundcloud
JSON::to_JSON
——但问题可能在于
JSON::to_JSON
的语法。您是否尝试过使用
encode_json()
,以及用于PUT请求的
WebService::Soundcloud
文档?@thunk这就是
$response->content()
中的全部内容。我尝试了
encode_json()
以及自己编写json字符串。这可能不是问题所在,因为上面的
PUT
示例适用于
JSON::to_JSON
。感谢您的回复!它一定是用perl编写的,我正在做一个更大的项目,它完全是用perl编写的。