Pages : 1
#1 Le 07/07/2021, à 12:43
- weezixx
[Résolu] Python Curl
Bonjour,
je réalise un projet qui utilise une API, mais je suis bloqué à un endroit c'est la création automatique du token.
Voici ce que la FAQ du site m'indique :
1.Se rendre sur la page « Subscription » et récupérer les informations « Consumer Key » et « Consumer Secret ».
2.Construire sa requête CURL comme suit : curl -k -d "grant_type=client_credentials" -H "Authorization: Basic BASE64KEY+:+SECRET" https://opendata-api.stib-mivb.be/token
3.Ecrire ses consumer key et secret key comme suit :« votreconsumerKey:votreconsumerSecret ». Et le convertir en Base64.
4.Dans la commande, remplacer BASE64KEY+:+SECRET par les deux clés converties.
Et voici ce que moi j'ai codé :
message = "XXXXXXXX:YYYYYYYYYY" <-- c'est mon votreconsumerKey:votreconsumerSecret récupéré sur le site même qui me fournit l'API (le point 3.)
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')
headers = {'Accept': 'application/json', 'Authorization': 'Bearer %s' %message}
Évidemment ça ne fonctionne pas et ça me renvoie un joli :
<ams:fault xmlns:ams="http://wso2.org/apimanager/security"><ams:code>900901</ams:code><ams:message>Invalid Credentials</ams:message><ams:description>Access failure for API: /OperationMonitoring/4.0, version: 4.0. Make sure your have given the correct access token</ams:description></ams:fault>
Alors que si je me rend sur le site et que je génère moi même un token, et que je remplace par message, tout fonctionne niquel.
Où est mon erreur ?
Merci
Dernière modification par weezixx (Le 07/07/2021, à 15:47)
Hors ligne
#2 Le 07/07/2021, à 13:01
- soshy
Re : [Résolu] Python Curl
Salut,
primo, tu viens de donner tes accès... Tu devrais éditer ton message pour masquer au moins partiellement la première ligne de ton extrait de code.
Ensuite, tu dois...
1- Faire une première requête équivalent au curl mentionné afin de récupérer un bearer token dans la réponse.
2- Utiliser le bearer issu de la réponse de l'étape précédente pour les autres requêtes vers ton api
Ta première requête doit être un POST avec
- en body : "grant_type=client_credentials"
- en header: "Authorization: Basic " + base64(message)
Et normalement avec ça, tu devrais récupérer un access_token, que tu mettras directement dans le header authorization.
Exemple :
Authorization: Bearer mon_access_token
Dernière modification par soshy (Le 07/07/2021, à 13:05)
Hors ligne
#3 Le 07/07/2021, à 13:10
- weezixx
Re : [Résolu] Python Curl
Merci de ta réponse,
je pense que c'est justement la requête curl que j'ai du mal à faire en python.
J'arrive pas à bien convertir le " curl -k -d "grant_type=client_credentials" -H "Authorization: Basic BASE64KEY+:+SECRET" https://opendata-api.stib-mivb.be/token"
en python.
Hors ligne
#4 Le 07/07/2021, à 14:56
- soshy
Re : [Résolu] Python Curl
#!/usr/bin/env python3
import requests
import base64
accessKeys='XXXXXXXX:YYYYYYYYYY'
# conversion de accessKeys en base64
base64AccessKeys=base64.b64encode(accessKeys.encode('ascii')).decode('ascii')
# headers pour la requete HTTP
headers={ 'Authorization': 'Basic ' + base64AccessKeys }
# demande du bearer token
reponse = requests.post('https://opendata-api.stib-mivb.be/token', headers=headers, data='grant_type=client_credentials')
# affichage de la réponse à la demande, elle contient le bearer token à utiliser pour la suite
print(reponse.text)
bearerToken=reponse.json()['access_token']
# nouveau headers à utiliser pour les autres requêtes
headers={ 'Authorization': 'Bearer ' + bearerToken }
# la suite...
Dernière modification par soshy (Le 07/07/2021, à 14:58)
Hors ligne
#5 Le 07/07/2021, à 15:46
- weezixx
Re : [Résolu] Python Curl
ça fonctionne niquel !
Jamais j'aurai trouvé ça tout seul ^^mais je vais étudier ta réponse
Merci encore!
Hors ligne
Pages : 1