2012-12-15 22 views
5

मैं पाइथन सीख रहा हूं और एक अभ्यास के रूप में मैंने बिटकॉइन बाजार पर लेनदेन करने के लिए एक प्रोग्राम बनाने की कोशिश की: https://bitcurex.com। यहां एक एपीआई संदर्भ है: https://bitcurex.com/reading-room/API। वहाँ एक PHP ग्राहक उदाहरण है, इसलिए मैं अजगर में अनुवाद करने की कोशिश की, तो मैं मिल गया है:PHP को पायथन (रेस्ट-एपीआई कनेक्शन) में अनुवाद करना

import math 
import time 
import simplejson 
import urllib 
import urllib2 
import hmac,hashlib 

def microtime(): 
    return '%f %d' % math.modf(time.time()) 

def query(path, key, secret, data={}): 
    mt = microtime().split() 
    nonce = mt[1] + mt[0][2:] 
    data['nonce'] = nonce 

    post_data = urllib.urlencode(data) 

    sign = hmac.new(secret.decode('base64'), post_data, hashlib.sha512).digest() 

    headers = {'Rest-Key' : key, 
       'Rest-Sign': sign.encode('base64').strip(), 
       'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)', 
       'Content-type': 'application/x-www-form-urlencoded'} 
    print headers 

    url = 'https://bitcurex.com/api/0/' + path 

    req = urllib2.Request(url, post_data, headers) 
    response = urllib2.urlopen(req) 

    return simplejson.loads(response.read()) 

print query('getFunds', '29a28e8fe234537056a8b256c0df50413f50da9c49ca61991ea8b8f108a88e09', 'y2NDxKGa/xvhtXrDP+3oscbBUFSac9+T8jzu2nRmt0vBdHbbl8NRqdmxKFr2IwwY5LAskTQZGyy2XONaNN6Jrg==') 

ये API कुंजियां काम कर रहे हैं - आप केवल उन लोगों के साथ getFunds क्वेरी कर सकते हैं।

यह लौटने में त्रुटि रखता है "मुझे लॉग इन करना चाहिए"। मैं फ़िडलर प्रॉक्सी डीबगर के माध्यम से उस अनुरोध पर देखने के लिए करने की कोशिश की, और यहाँ आप उस प्रयास का हेडर है:

POST /api/0/getFunds HTTP/1.1 
Accept-Encoding: identity 
Rest-Sign: Dd1WBn2T5SYTbqMMohOxr46IaLDrkelgH7AgkrrB0mT0PxKfv15vSJ3b6xNdc5PO2Yz9cDpu0u/H 
WIc7bH56sQ==: 
Content-Length: 22 
Rest-Key: 29a28e8fe234537056a8b256c0df50413f50da9c49ca61991ea8b8f108a88e09 
Connection: close 
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT) 
Host: bitcurex.com 
Content-Type: application/x-www-form-urlencoded 

फ़िडलर मुझे एक त्रुटि दिखा रहा है:

Incorrectly formed request headers. 
Missing colon in header #3, WIc7bH56sQ== 

किसी भी विचार? ऐसा लगता है कि मेरे रेस्ट-साइन बहुत लंबे हैं या ऐसा कुछ है। मुझे लगता है कि मेरा कोड बिल्कुल PHP उदाहरण के समान होना चाहिए। मैं क्या गलत कर रहा हूँ?

उत्तर

2

इस लाइन संदिग्ध है:

'Rest-Sign': sign.encode('base64').strip() 

तुम सच में एक हैडर के मूल्य शाब्दिक शामिल करना चाहते हैं '\ n' संकेत?

'Dd1WBn2T5SYTbqMMohOxr46IaLDrkelgH7AgkrrB0mT0PxKfv15vSJ3b6xNdc5PO2Yz9cDpu0u/H\nWIc7bH56sQ==' 

नोट बीच में \n: यह क्या एनकोड ('बेस 64') रिटर्न, इस स्ट्रिंग है --- अपने उदाहरण में। मैं अनिश्चित हूं, लेकिन शायद \n संकेतों को हटाकर आपको जो चाहिए वह आपको देता है।

+0

आईटी काम किया! धन्यवाद! – mpestkow

+0

मेरे लिए भी काम किया, लेकिन मुझे लगता है कि मुझे 403 प्रतिक्रिया मिलती है। मैंने अपना खुद का कुंजी/गुप्त मूल्य इस्तेमाल किया लेकिन फिर भी अगर लॉगिन करने में विफल रहता है –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^