2017-10-15 4 views
0

In Ordnung, also bin ich ein bisschen außerhalb meiner Liga auf diesem einen denke ich. Ich versuche, benutzerdefinierte HTTP-Header zu erleichtern, was hier zu beachten ist:Python3: Benutzerdefinierte verschlüsselte Header URLLIB - KrakenAPI

API-Key = API key 
    API-Sign = Message signature using HMAC-SHA512 of (URI path + SHA256(nonce + POST data)) and base64 decoded secret API key 

von https://www.kraken.com/help/api

Ich versuche nur, wenn überhaupt möglich, aus urllib zu arbeiten.

Unten finden Sie eine der vielen Versuche, sie wie erforderlich codiert zu bekommen:

import os 
    import sys 
    import time 
    import datetime 
    import urllib.request 
    import urllib.parse 
    import json 
    import hashlib 
    import hmac 
    import base64 

    APIKey = 'ThisKey' 
    secret = 'ThisSecret' 

    data = {} 

    data['nonce'] = int(time.time()*1000) 

    data['asset'] = 'ZUSD' 

    uripath = '/0/private/TradeBalance' 

    postdata = urllib.parse.urlencode(data) 

    encoded = (str(data['nonce']) + postdata).encode() 
    message = uripath.encode() + hashlib.sha256(encoded).digest() 

    signature = hmac.new(base64.b64decode(secret), 
        message, hashlib.sha512) 
    sigdigest = base64.b64encode(signature.digest()) 

    #this is purely for checking how things are coming along. 
    print(sigdigest.decode()) 

    headers = { 
    'API-Key': APIKey, 
    'API-Sign': sigdigest.decode() 
    } 

Die oben arbeiten kann ganz gut, wo ich jetzt bin zu kämpfen angemessen ist es auf die Website zu bekommen. Dies ist mein letzter Versuch:

myBalance = urllib.urlopen('https://api.kraken.com/0/private/TradeBalance', urllib.parse.urlencode({'asset': 'ZUSD'}).encode("utf-8"), headers) 

Jede Hilfe wird sehr geschätzt. Danke!

+0

Kredit wo btw fällig, wurde von einem Teil dieses Codes gezogen: https: // Github .com/veox/python3-krakenex Aber aufgrund der Verwendung von Anfragen konnte ich es nicht auf meinem Rechner funktionieren. – Samuel

Antwort

0

urlopen unterstützt keine Header hinzugefügt, so dass Sie ein Request Objekt erstellen müssen und übergeben es an urlopen:

url = 'https://api.kraken.com/0/private/TradeBalance' 
body = urllib.parse.urlencode({'asset': 'ZUSD'}).encode("utf-8") 
headers = { 
    'API-Key': APIKey, 
    'API-Sign': sigdigest.decode() 
} 

request = urllib.request.Request(url, data=body, headers=headers) 
response = urllib.request.urlopen(request) 
+0

Danke Freund! Jetzt kommt es wieder mit "{'error': ['EAPI: Invalid key']}", was mich denken lässt, irgendwo habe ich alles falsch codiert. – Samuel

+0

Es funktioniert, danke für Ihre Hilfe! – Samuel

Verwandte Themen