2014-06-26 8 views
5

में एचएमएसी हस्ताक्षर अनुरोध मैं अनुरोध पुस्तकालय का उपयोग कर पाइथन 3.4 में एक एपीआई कॉल के लिए एक एचएमएसी-एसएचए 512 हस्ताक्षरित अनुरोध बनाने की कोशिश कर रहा हूं। मैं दस्तावेज़ों का पालन करने की कोशिश कर रहा हूं, लेकिन इस त्रुटि को मार रहा हूं:पाइथन

AttributeError: '_hashlib.HASH' object has no attribute 'new' 

यहां कुछ कोड है। यह एचएमएसी कन्स्ट्रक्टर पर त्रुटि के साथ विफल रहा है। यह ठीक है अगर मैं हैशिब.एमडी 5() को कोशिश करता हूं और पास करता हूं या पूरी तरह से डाइजेस्ट पैरामीटर को छोड़ देता हूं।

मुझे यकीन नहीं है कि मैं बाद में अनुरोध पर हस्ताक्षर कर रहा हूं क्योंकि मुझे अभी तक यह नहीं मिला है। जिस सेवा का मैं उपयोग करने का प्रयास कर रहा हूं उसके लिए दस्तावेज़ मेरे रहस्य के साथ यूआरएल पर हस्ताक्षर करने के लिए कहते हैं। काम करने के लिए मुझे इसे बाइट स्ट्रिंग होने की ज़रूरत है।

import hmac 
import hashlib 
import requests 

secret = b'mysecret' 
url = b'http://someurl.com/something/' 

signing = hmac.new(secret, url, hashlib.sha512()) 

headers = {'apisign': signing.digest()} 
response = requests.get(url, headers=headers) 

किसी भी पॉइंटर्स की सराहना की। मुझे एक उदाहरण नहीं मिला। धन्यवाद!

उत्तर

11

आप इसे बुलाने की hashlib.sha512 प्रतिदेय, नहीं परिणाम के लिए एक संदर्भ में पारित करना होगा: वैकल्पिक रूप से

signing = hmac.new(secret, url, hashlib.sha512) 

, तो आप सिर्फ स्ट्रिंग 'sha512' इस्तेमाल कर सकते हैं:

signing = hmac.new(secret, url, 'sha512') 

और hashlib.new() हो जाएगा हैश ऑब्जेक्ट का निर्माण करने के लिए प्रयोग किया जाता है।

डेमो:

>>> import hashlib 
>>> import hmac 
>>> secret = b'mysecret' 
>>> url = b'http://someurl.com/something/' 
>>> signing = hmac.new(secret, url, hashlib.sha512) 
>>> signing.digest() 
b'!~s2\x97\x97\xa9\xcc\xefcb\xa8\xcc\xa7\xbc\xec\xe5\xfc\xc3\xac\xfc\xbc5]\x05\x96\xc7\x83\x8b\x1b\x90\xd3\xa5\xca\x8cLsC\x17\xa0\xea\xa3\xfe\xd8M\xfda\x1epj\x90\xff}\xfa\[email protected]\x92\xfb\xee\xa8\xab\x1b\x08\x8e' 
+0

हा, कि याद किया। धन्यवाद! – Ludo