Binance API,错误代码:-1102,强制参数 'timestamp' 未发送,为 empty/null,或格式错误
Binance API, Error Code: -1102, Mandatory parameter 'timestamp' was not sent, was empty/null, or malformed
我正在尝试使用以下 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×tamp=" . 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."}
当然,时间戳参数已发送,不为空或null,也不格式错误。
如果我将输出打印到控制台,它会显示以下内容:
curl -s -m 3 -H 'X-MBX-APIKEY: X' -d 'recvWindow=2000×tamp=1516082731909&signature=X' -X GET 'https://api.binance.com/api/v3/account'
有人可以帮忙吗?
谢谢。
参考文献:
注意:我用 'X'
替换了 API Key/Secret 和签名
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)),
);
您不只是错误地构建了参数。您也有代码注入错误。您可以按如下方式正确构成 shell 命令:
use String::ShellQuote qw( shell_quote );
my $cmd = shell_quote(
'curl',
'-s',
'-m' => 3,
'-H' => 'X-MBX-APIKEY: $api_key',
'-X' => 'GET',
$url,
);
我正在尝试使用以下 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×tamp=" . 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."}
当然,时间戳参数已发送,不为空或null,也不格式错误。
如果我将输出打印到控制台,它会显示以下内容:
curl -s -m 3 -H 'X-MBX-APIKEY: X' -d 'recvWindow=2000×tamp=1516082731909&signature=X' -X GET 'https://api.binance.com/api/v3/account'
有人可以帮忙吗? 谢谢。
参考文献:
注意:我用 'X'
替换了 API Key/Secret 和签名For
GET
endpoints, parameters must be sent as aquery 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)),
);
您不只是错误地构建了参数。您也有代码注入错误。您可以按如下方式正确构成 shell 命令:
use String::ShellQuote qw( shell_quote );
my $cmd = shell_quote(
'curl',
'-s',
'-m' => 3,
'-H' => 'X-MBX-APIKEY: $api_key',
'-X' => 'GET',
$url,
);