gpt4 book ai didi

linux - Binance API,错误代码 : -1102, 强制参数 'timestamp' 未发送、为空/空或格式错误

转载 作者:太空狗 更新时间:2023-10-29 11:49:11 24 4
gpt4 key购买 nike

我正在尝试使用以下 Perl 代码从 Binance.com 获取我的帐户信息:

#!/usr/bin/perl

use strict;
use warnings;

use Digest::SHA qw(hmac_sha256_hex);
use Time::HiRes qw(time);

my $api_key = "X";
my $api_secret = "X";

my $data = "recvWindow=2000&timestamp=" . int(time() * 1000);
my $signature = uc(hmac_sha256_hex($data, $api_secret));

print `curl -s -m 3 -H 'X-MBX-APIKEY: $api_key' -d '$data&signature=$signature' -X GET 'https://api.binance.com/api/v3/account'` . "\n";

该代码看起来正确并且应该可以工作,但我收到以下错误:

{"code":-1102,"msg":"Mandatory parameter 'timestamp' was not sent, was empty/null, or malformed."}

当然,timestamp参数是发送的,不是空的或null的,也不是格式错误的。

如果我将输出打印到控制台,它会显示以下内容:

curl -s -m 3 -H 'X-MBX-APIKEY: X' -d 'recvWindow=2000&timestamp=1516082731909&signature=X' -X GET 'https://api.binance.com/api/v3/account'

有人可以帮忙吗?谢谢。

引用资料:

  1. Binance API official documentation / SIGNED Endpoint Examples
  2. Account information

注意:我用“X”替换了 API Key/Secret 和 Signature

最佳答案

For GET endpoints, parameters must be sent as a query string.

基本上,使用 GET 的目的是允许缓存响应,而必须处理请求主体会使这变得不必要的复杂。因此,GET 的主体请求 should always be ignored ,所以 -d 对于 GET 请求没有意义。

您可以按如下方式正确形成 URL:

use URI qw( );

my $url = URI->new('https://api.binance.com/api/v3/account');
$url->query_form(
recvWindow => 2000
timestamp => int(time() * 1000),
signature => uc(hmac_sha256_hex($data, $api_secret)),
);

您不只是错误地构建了参数。您也有代码注入(inject)错误。您可以按如下方式正确形成 shell 命令:

use String::ShellQuote qw( shell_quote );

my $cmd = shell_quote(
'curl',
'-s',
'-m' => 3,
'-H' => 'X-MBX-APIKEY: $api_key',
'-X' => 'GET',
$url,
);

关于linux - Binance API,错误代码 : -1102, 强制参数 'timestamp' 未发送、为空/空或格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48275608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com