Python中的HMAC签名请求

Python中的HMAC签名请求,python,python-requests,hmac,hashlib,Python,Python Requests,Hmac,Hashlib,我正在尝试使用请求库为Python 3.4中的API调用创建HMAC-SHA512签名请求。我试图遵循文档,但遇到以下错误: AttributeError: '_hashlib.HASH' object has no attribute 'new' 这里有一些代码。它因hmac构造函数上的错误而失败。如果我尝试传递hashlib.md5(),或者完全忽略digest参数,就可以了 我不确定我是否在之后正确地签署了请求,因为我还没有做到这一点。我正在尝试使用的服务的文档可以说是用我的秘密对URL

我正在尝试使用请求库为Python 3.4中的API调用创建HMAC-SHA512签名请求。我试图遵循文档,但遇到以下错误:

AttributeError: '_hashlib.HASH' object has no attribute 'new'
这里有一些代码。它因hmac构造函数上的错误而失败。如果我尝试传递hashlib.md5(),或者完全忽略digest参数,就可以了

我不确定我是否在之后正确地签署了请求,因为我还没有做到这一点。我正在尝试使用的服务的文档可以说是用我的秘密对URL进行签名。我需要这是一个字节字符串,这样才能工作

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)

欢迎指点。我找不到一个例子。谢谢

必须传入对
hashlib.sha512
callable的引用,而不是调用它的结果:

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\xc2@\x92\xfb\xee\xa8\xab\x1b\x08\x8e'