admin管理员组文章数量:1401849
I have the following code working properly, but eventually (in fact quite very often) it returns error {'status': 'error', 'err-code': 'api-signature-not-valid', 'err-msg': 'Signature not valid: Verification failure [校验失败]', 'data': None}
during the loop operation.
I cannot understand the reason why, because it sometimes works and sometimes doesn't for apparently no reason...
Have anybody ever faced this kind of issue before? Could somebody please try to help me? I've tried different approaches to solve the problem, but in the end every approach gave me only errors... This is the only solution I have that appears to eventually work. Thank you all in advance for any tip or help!
from datetime import datetime
import hmac
import hashlib
import base64
from urllib.parse import urlparse
import requests
import time
def generate_timestamp():
# Gera o timestamp no formato ISO 8601
timestamp = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S')
# Substituir os caracteres para codificação de URL
timestamp = timestamp.replace(":", "%3A").replace(" ", "%20").upper()
return timestamp
def generate_signature(api_secret, method, url, params):
# Ordenar os parâmetros em ordem alfabética
sorted_keys = sorted(params.keys())
query_string = "&".join([f"{key}={params[key]}" for key in sorted_keys])
# Montar o texto pré-assinado
url_parts = urlparse(url)
host = url_partsloc
path = url_parts.path
pre_signed_text = f"{method.upper()}\n{host}\n{path}\n{query_string}"
print(f"Pre-signed text:\n{pre_signed_text}")
# Gerar a assinatura usando HMAC-SHA256
signature = hmac.new(
api_secret.encode('utf-8'),
pre_signed_text.encode('utf-8'),
hashlib.sha256
).digest()
# Retorna a assinatura em Base64
return base64.b64encode(signature).decode('utf-8')
def fetch_balances(api_key, api_secret):
spot_account_id = "29996280"
endpoint = f"/v1/account/accounts/{spot_account_id}/balance"
base_url = ";
url = f"{base_url}{endpoint}"
method = "GET"
timestamp = generate_timestamp()
# Parâmetros essenciais
params = {
"AccessKeyId": api_key,
"SignatureMethod": "HmacSHA256",
"SignatureVersion": "2",
"Timestamp": timestamp
}
# Gerar a assinatura
signature = generate_signature(api_secret, method, url, params)
if not signature:
print("Erro ao gerar a assinatura")
return []
# Adicionar a assinatura aos parâmetros
params["Signature"] = signature
sorted_keys = sorted(params.keys())
query_string = "&".join([f"{key}={params[key]}" for key in sorted_keys])
# Construir a URL final
final_url = f"{url}?{query_string}"
print(f"URL Final: {final_url}")
# Executar a requisição
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.get(final_url, headers=headers)
if response.status_code == 200:
print("Requisição bem-sucedida")
return response.json()
else:
print(f"Falha na requisição: {response.status_code}")
print(f"Resposta JSON: {response.text}")
return []
def loop_fetch_balances(api_key, api_secret):
while True: # Loop infinito
try:
# Chama a função fetch_balances
balances = fetch_balances(api_key, api_secret)
# Imprime os balances, se disponíveis
if balances:
print("Inicio da resposta:", str(balances)[:200]) # Exibe os primeiros 100 caracteres
else:
print("Não foi possível obter os balances.")
# Aguarda 5 segundos antes de repetir
time.sleep(5)
except KeyboardInterrupt:
# Permite sair do loop com Ctrl+C
print("Encerrando o loop...")
break
# Configurações da API
api_key = "MY_API_KEY"
api_secret = "MY_API_SECRET"
# Executa o loop
loop_fetch_balances(api_key, api_secret)
本文标签: pythonHuobi API authentication often returning errorStack Overflow
版权声明:本文标题:python - Huobi API authentication often returning error - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744301702a2599613.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论