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

Perl调用Alpaca API发起卖单POST请求失败求助

Perl调用Alpaca API POST请求格式错误解决方案

问题分析

核心问题是字符串插值失效和JSON格式不规范:

  • 单引号包裹的JSON内容无法被Perl解析变量,导致发送的请求体是字面量$ticker而非实际变量值
  • 部分子例程存在qty值未加引号、Content-Type头设置不规范等问题

错误返回信息:

{"code":40010000,"message":"request body format is invalid"}

正确示例代码

以下是修正后的可运行版本,解决变量插值和JSON格式问题:

use LWP::UserAgent;
use JSON; # 用JSON模块生成标准JSON,避免手动拼接出错

# 初始化UserAgent(确保在子例程外定义)
my $browser = LWP::UserAgent->new;

my ($url, $API, $secret); # 替换为你的实际参数

while (my $line = <POSITIONS>) {
    chomp $line; # 去除换行符,避免分割出错
    my ($ticker, $date8601, $epoch, $side, $qty0, $entryprice, $unrealized) = split(",", $line);
    sellorder($url, $API, $secret, $ticker, $qty0);
}

sub sellorder {
    my ($url, $api_key, $api_secret, $ticker, $qty) = @_; # 参数传递,避免全局变量依赖

    # 构造请求体数据结构
    my %order_data = (
        symbol         => $ticker,
        qty            => $qty,
        side           => 'sell',
        type           => 'market',
        time_in_force  => 'gtc'
    );

    # 转为标准JSON字符串
    my $json_content = encode_json(\%order_data);

    my $req = HTTP::Request->new(POST => $url);
    $req->header(
        'APCA-API-KEY-ID'     => $api_key,
        'APCA-API-SECRET-KEY' => $api_secret,
        'Content-Type'        => 'application/json'
    );
    $req->content($json_content);

    my $resp = $browser->request($req);
    my $raw_text = $resp->decoded_content;

    # 调试输出(可选)
    print "接口返回: $raw_text\n";
}

关键修正点

  • 用JSON模块生成JSON:手动拼接字符串易出格式错误,模块能保证生成标准合规的JSON
  • 子例程用参数传递:避免依赖全局变量,代码更健壮
  • 规范设置Content-Type头:明确指定为application/json,符合API要求
  • 处理每行输入的换行符:避免分割后变量带多余换行符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:07:40