如何用Poloniex API发送密钥/密码对?

6 人关注

我想写一个简单的脚本来验证我是否正确地进行了API调用,然后我打算从那里建立一个更复杂的程序。我收到的错误响应是。

{"error":"Invalid API key\/secret pair."}

我正在研究的API文档可以在以下网站找到。

https://poloniex.com/support/api/

我只是手动递增nonce,以保持事情简单。

My code is:

import urllib
import urllib2
import json
import time
import hmac,hashlib
APIKey = "<my_API_key>"
Secret = "<my_secret>"
post_request
"command=returnBalances"
sign = hmac.new(Secret, post_request, hashlib.sha512).hexdigest()
ret = urllib2.urlopen(urllib2.Request("https://poloniex.com/tradingApi?   key=" + APIKey + "&sign=" + sign + "&nonce=0008"))
print ret.read()
    
3 个评论
错误说你有一个无效的密钥/秘密对,所以问题可能是你有一个无效的/密钥秘密对我猜。
尝试在标题中发送密钥和秘密,如 这个例子 ,第44至51行。或者干脆自己使用那个漂亮的包装器,看起来很方便。
Oin
API文档说你必须在头文件中发送密钥和秘密,你把它们作为URL参数发送。
python
api
user97315
user97315
发布于 2016-02-11
3 个回答
A STEFANI
A STEFANI
发布于 2020-12-24
已采纳
0 人赞同

假设你的APIKey和Secret没有问题,下面这个版本就可以工作。

import urllib
import urllib2
import json
import time
import hmac,hashlib
req={}
APIKey = "<my_API_key>"
Secret = "<my_secret>"
command="returnBalances"
req['command'] = command
req['nonce'] = int(time.time()*1000)
post_data = urllib.urlencode(req)
sign = hmac.new(Secret, post_data, hashlib.sha512).hexdigest()
#print sign
headers = {
    'Sign': sign,
    'Key': APIKey
ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/tradingApi', post_data, headers))
jsonRet = json.loads(ret.read())
print jsonRet

如果你用你自己的秘密和API密钥运行这段代码,它仍然不工作。 这肯定是你的APIKey或秘密有打字错误!![或者API密钥被限制为 "只允许提款",或者你选择了IP限制,并试图从一个不知道的IP连接。]

Andrea Corbellini
Andrea Corbellini
发布于 2020-12-24
0 人赞同

API文档中说。

所有对交易API的调用都通过HTTP POST发送至 https://poloniex.com/tradingApi 并且必须包含以下标题。

  • Key - Your API key.
  • Sign - The query's POST data signed by your key's "secret" according to the HMAC-SHA512 method.
  • 此外,所有查询必须包括一个 "nonce "POST参数。

    尽管它说的是 "标题",但我认为它是指POST参数。

    还看了看 参考Python的实现 通过文档链接,似乎API希望 Key Sign 作为头文件,而 nonce 作为POST参数。

    将您的请求从。

    urllib2.Request("https://poloniex.com/tradingApi?   key=" + APIKey + "&sign=" + sign + "&nonce=0008")
    
    data = urllib.urlencode({
        'nonce': '0008',
        # ...
        # insert here the other parameters you need
        # ...
    headers = {
        'Key': APIKey,
        'Sign': sign,
    urllib2.Request('https://poloniex.com/tradingApi', data, headers)
        
    Andrew K
    Andrew K
    发布于 2020-12-24
    0 人赞同
    import urllib.parse
    import json
    import time
    import hmac,hashlib
    import httpx
    APIKey = "<my_API_key>"
    Secret = "<my_secret>"
    req={}
    req['nonce'] = int(time.time()*1000)
    req['command'] = "returnDepositAddresses"
    # encoding post_data for sign calculation
    encoded_post_data = urllib.parse.urlencode(req).encode('utf-8')
    sign = hmac.new(bytes(Secret, 'utf-8'), encoded_post_data, hashlib.sha512).hexdigest()
    headers = {
        'Sign': sign,
        'Key': APIKey
    with httpx.Client() as client:
        url = 'https://poloniex.com/tradingApi'
        response = client.post(url, headers=headers, data=req)
    data = response.json()
    print(data)