Bash卷毛标志hmac

时间:2017-08-21 20:43:21

标签: bash rest api curl

我正在尝试使用Bittrex API。提供的唯一示例如下。我甚至不确定这是什么语言。我试图用bash复制这个。完整的API详细信息位于https://bittrex.com/Home/Api

$apikey='xxx';
$apisecret='xxx';
$nonce=time();
$uri='https://bittrex.com/api/v1.1/market/getopenorders?apikey='.$apikey.'&nonce='.$nonce;
$sign=hash_hmac('sha512',$uri,$apisecret);
$ch = curl_init($uri);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('apisign:'.$sign));
$execResult = curl_exec($ch);
$obj = json_decode($execResult);

我尝试了几件事,但这是我尝试过的最新内容。

#Bash
apikey="mykey"
secret="mysecret"
nonce=`date +%s`
uri="https://bittrex.com/api/v1.1/market/getopenorders?apikey=$apikey&nonce=$nonce"
apisig=`echo -n "$uri" | openssl dgst -sha512 -hmac "$secret"`

curl -sG https://bittrex.com/api/v1.1/market/getopenorders?nonce="$nonce"&apikey="$apikey"&apisig="$apisig"

我得到" {"成功":false,"消息":" APIKEY_NOT_PROVIDED","结果":null} "

1 个答案:

答案 0 :(得分:4)

您缺少的是:

  • 在查询字符串
  • 中转义&
  • 将摘要作为标题而非参数
  • 传递

所以适合我的代码是:

#!/bin/bash

apikey="mykey"
secret="mysecret"
nonce=`date +%s`
uri="https://bittrex.com/api/v1.1/market/getopenorders?apikey=$apikey&nonce=$nonce"
apisig=`printf %s "$uri" | openssl dgst -sha512 -hmac "$secret"| sed 's/^.*= //'`

curl -sG $uri --header "apisign: $apisig"