【发布时间】:2019-04-20 18:00:51
【问题描述】:
我正在尝试构建 Marvel API 调用。
这是一个关于授权的链接: https://developer.marvel.com/documentation/authorization
我正在尝试创建一个服务器端应用程序,因此根据上面的链接,我需要一个时间戳、apikey 和哈希 url 参数。散列需要是 md5 散列形式:md5(timestamp + privateKey + publicKey) 并且 apikey url 参数是我的公钥。
这是我的代码,我在 Python 3 中发出请求,使用请求库形成请求,使用时间库形成时间戳,并使用 hashlib 库形成哈希。
#request.py: making a http request to marvel api
import requests;
import time;
import hashlib;
#timestamp
ts = time.time();
ts_str = str(float(ts));
#keys
public_key = 'a3c785ecc50aa21b134fca1391903926';
private_key = 'my_private_key';
#hash and encodings
m_hash = hashlib.md5();
ts_str_byte = bytes(ts_str, 'utf-8');
private_key_byte = bytes(private_key, 'utf-8');
public_key_byte = bytes(public_key, 'utf-8');
m_hash.update(ts_str_byte + private_key_byte + public_key_byte);
m_hash_str = str(m_hash.digest());
#all request parameters
payload = {'ts': ts_str, 'apikey': 'a3c785ecc50aa21b134fca1391903926', 'hash': m_hash_str};
#make request
r = requests.get('https://gateway.marvel.com:443/v1/public/characters', params=payload);
#for debugging
print(r.url);
print(r.json());
这是输出:
$python3 request.py
https://gateway.marvel.com:443/v1/public/characters...${URL TRUNCATED FOR READABILITY)
{'code': 'InvalidCredentials', 'message': 'That hash, timestamp, and key combination is invalid'}
$
我不确定究竟是什么导致组合无效。
我可以根据要求提供更多信息。任何信息,将不胜感激。谢谢!
编辑:
总的来说,我对 API 调用有点陌生。是否有任何资源可用于了解有关如何执行它们的更多信息?到目前为止,以我有限的经验,它们似乎非常具体,让每个人都能工作需要一段时间。我是一名大学生,每当我参加黑客马拉松时,我都需要很长时间才能弄清楚如何执行 API 调用。我承认我没有经验,但一般来说,找出新的 API 需要很大的学习曲线,即使对于已经完成了 10 次左右的人来说也是如此?
再次感谢您的宝贵时间:)
【问题讨论】:
-
我玩过你的代码,我认为
m_hash.hexdigest()可能是解决方案。我必须对ts = 1和apikey = 1234进行硬编码,以确保Marvel 示例中的哈希正确输出。另外,ts_str = str(int(ts));int,不是浮点数? -
嗨,你是对的,我也刚刚弄清楚了,这是哈希的格式 :( 感谢您的时间,赞成您的回复,因为它是正确的。现在 time.time()返回一个十进制值——我多次打印了 ts 的值,看起来它会根据秒而改变——所以只要我不在同一秒内进行多个 API 调用,整数值就可以了。如果我做,我可能不得不使用浮点值。谢谢:)
标签: python-3.x request timestamp hashlib