You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Cro、HTTP::Tiny等库实现等价于curl的音频文件POST请求?

将curl POST命令转换为Raku实现(HTTP::Tiny & Cro::HTTP::Client)

1. HTTP::Tiny 实现

利用HTTP::Tiny自动处理multipart编码的能力,直接映射curl参数即可:

use HTTP::Tiny;

my $audio-file = '/path/to/file/audio.mp3'.IO;
my $token = 'TOKEN'; # 替换为你的实际授权令牌

my $response = HTTP::Tiny.post:
    'https://api.someservice.com/v1/',
    headers => { Authorization => "Bearer $token" },
    content => {
        file        => $audio-file,
        transformer => 'trans-2',
        format      => 'text'
    };

# 处理响应结果
if $response<success> {
    say $response<content>.decode;
} else {
    say "请求失败: {$response<status>} {$response<reason>}";
    say $response<content>.decode if $response<content>;
}

2. Cro::HTTP::Client 实现

Cro需要手动构建multipart/form-data请求体,示例如下:

use Cro::HTTP::Client;
use Cro::HTTP::Body::MultiPart;

my $audio-file = '/path/to/file/audio.mp3'.IO;
my $token = 'TOKEN'; # 替换为你的实际授权令牌

# 构建multipart表单
my $form = Cro::HTTP::Body::MultiPart.new;
$form.add-part(
    name => 'file',
    filename => $audio-file.basename,
    content-type => 'audio/mpeg',
    body => $audio-file.slurp(:bin)
);
$form.add-part(name => 'transformer', body => 'trans-2');
$form.add-part(name => 'format', body => 'text');

# 发送POST请求
my $response = await Cro::HTTP::Client.post(
    'https://api.someservice.com/v1/',
    headers => {
        Authorization => "Bearer $token",
        'Content-Type' => $form.content-type
    },
    body => $form
);

# 处理响应结果
if $response.status ~~ 200..299 {
    say await $response.body-text;
} else {
    say "请求失败: {$response.status} {$response.reason-phrase}";
    say await $response.body-text if $response.has-body;
}

补充说明

  • HTTP::Tiny会自动识别content中的IO对象,将其作为文件字段处理,并自动生成正确的multipart/form-data请求头。
  • Cro需手动创建MultiPart对象,分别添加文件字段(需指定文件名、内容类型并读取二进制内容)和普通文本字段,确保请求体格式符合要求。

内容的提问来源于stack exchange,提问作者Anton Antonov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:15:07