Pour faire des requetes http en Python, une des librairies les plus utilisées est requests.
Cette librairie permet de faire facilement des requetes sans écrire trop de code (moins qu’avec urllib).
Il s’agit juste de préciser :
Le type de requete (GET, POST),
puis l’url,
si besoin les infos d’authentification,
le contenu des headers,
et à la fin le contenu de la requete à envoyer.
Pour le contenu de la requête à envoyer, il faut distinguer 2 formats de données :
- Pour les infos à envoyer sour forme de chaine de paires clé-valeur separés par = et & (comme pour la soumission de formulaire via « application/x-www-form-urlencoded »), il faut utiliser le parametre data
- Pour les infos à envoyer au format JSON (les donnees sont serialisées pour etre envoyees au format JSON via « application/json »), il faut utiliser le parametre json.
Code d’exemple :
import requests
#print("-- client_id")
client_id = info["client_id"]
#print("-- client_secret")
client_secret = info["client_secret"]
#print("-- header_content")
header_content = {}
#print("-- post_body_data_urlencoded")
post_body_data_urlencoded = {"grant_type":"credentials"}
#print("-- Appel 1 pour avoir token Oauth")
url = "https://monapi.com/token"
#Avec utilisation de la methode POST avec parametre data : les infos sont envoyées sour forme de chaine de paires clé-valeur separées par = et & , comme pour la soumission de formulaire application/x-www-form-urlencoded
response = requests.request("POST", url, auth = (client_id, client_secret), headers = header_content, data = post_body_data_urlencoded )
#print("-- Recuperation du token")
token = json.loads(response.text)
token = token["access_token"]
#print("-- Preparation de l appel 2 avec le token")
header_content = {
"Authorization" : "Bearer " + token,
"Content-type" : "application/json"
}
post_body_json = {
"query": requete,
"environment": env,
}
#print("-- Appel 2 de l'API avec le token")
url = "https://monapi.com/query"
#Avec utilisation de la methode POST avec parametre json : les donnees sont serialisées pour etre envoyées au format JSON application/json (pas application/x-www-form-urlencoded avec chaine de paires clé-valeur)
response = requests.request("POST", url, headers = header_content, json = post_body_json)