Неверный хэш, временная метка и комбинация клавиш в Marvel API Call - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь сформировать Marvel API Call.

Вот ссылка на авторизацию: https://developer.marvel.com/documentation/authorization

Я пытаюсь создать приложение на стороне сервера, поэтому по ссылке выше мне нужны параметры timestamp, apikey и hash url. Хеш должен быть хэшем md5 в форме: md5 (отметка времени + 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());

Вот вывод:

enter image description here

Я не уверен, что именно делает комбинацию недействительной.

Я могу предоставить дополнительную информацию по запросу. Любая информация приветствуется. Спасибо!

EDIT:

Я немного новичок в вызовах API в целом. Есть ли ресурсы для понимания того, как их выполнять? Пока что из-за моего ограниченного опыта они кажутся очень конкретными, и чтобы заставить каждого работать, требуется некоторое время. Я студент колледжа, и всякий раз, когда я работаю в хакатонах, у меня уходит много времени только на то, чтобы понять, как выполнить вызов API. Я признаю, что у меня нет опыта, но в целом для определения новых API требуется большая кривая обучения, даже для людей, которые сделали 10 или около того из них?

Опять же, спасибо за ваше время:)

Ответы [ 3 ]

0 голосов
/ 22 марта 2019

Я заметил, что в вашем терминале ваш MD5 хэш прописан. MD5 должен выводиться в нижнем регистре. Убедитесь, что вы перешли на это.

Это была моя проблема, я отправлял хэш верхнего регистра.

0 голосов
/ 13 июня 2019

У меня также были похожие проблемы при доступе к ключу API Marvel.Для тех, кто все еще испытывает трудности, вот мой шаблонный код (который я использую в блокноте Jupyter).

# import dependencies
import hashlib  #this is needed for the hashing library
import time   #this is needed to produce a time stamp
import json   #Marvel provides its information in json format
import requests #This is used to request information from the API

#Constructing the Hash
m = hashlib.md5()   #I'm assigning the method to the variable m.  Marvel 
    #requires md5 hashing, but I could also use SHA256 or others for APIS other 
    #than Marvel's 

ts = str(time.time())   #This creates the time stamp as a string
ts_byte = bytes(ts, 'utf-8')  #This converts the timestamp into a byte 
m.update(ts_byte)  # I add the timestamp (in byte format) to the hash
m.update(b"my_private_key") #I add the private key to 
    #the hash.Notice I added the b in front of the string to convert it to byte 
    #format, which is required for md5
m.update(b"b2aeb1c91ad82792e4583eb08509f87a") #And now I add my public key to 
    #the hash
hasht = m.hexdigest()    #Marvel requires the string to be in hex; they 
    #don't say this in their API documentation, unfortunately.

#constructing the query
base_url = "https://gateway.marvel.com"  #provided in Marvel API documentation
api_key = "b2aeb1c91ad82792e4583eb08509f87a" #My public key
query = "/v1/public/events" +"?"  #My query is for all the events in Marvel Uni

#Building the actual query from the information above
query_url = base_url + query +"ts=" + ts+ "&apikey=" + api_key + "&hash=" + 
hasht
print(query_url) #I like to look at the query before I make the request to 
    #ensure that it's accurate.

#Making the API request and receiving info back as a json
data = requests.get(query_url).json()
print(data)  #I like to view the data to make sure I received it correctly

Дайте кредит там, где он заслуживает доверия, я много полагался на этот блог.Вы можете пойти сюда для получения дополнительной информации о библиотеке hashlib.https://docs.python.org/3/library/hashlib.html

0 голосов
/ 18 ноября 2018

Как упомянуто выше, решение состояло в том, что хэш не был отформатирован должным образом.Требуется шестнадцатеричная строка, и проблема решена.

...