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
相关产品推荐
相关产品推荐

