technique:python:api_python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
technique:python:api_python [2020/06/26 15:30] francoisatechnique:python:api_python [2023/02/14 20:55] francoisa
Ligne 111: Ligne 111:
  
 </code> </code>
 +
 +===== Cas de l'API de Garradin =====
 +
 +Pour utiliser l'[[https://fossil.kd2.org/garradin/wiki?name=API|API de Garradin]], on peut tester avec curl en utilisant l'option "''curl –trace-ascii -''" pour voir le contenu des échanges :
 +<code>
 +
 +=> Send header, 233 bytes (0xe9)
 +0000: POST /api/sql/ HTTP/1.1
 +0019: Host: assos-zourit-net.garradin.eu
 +003d: Authorization: Basic XXXX
 +007c: User-Agent: curl/7.81.0
 +0095: Accept: */*
 +00a2: Content-Length: 50
 +00b6: Content-Type: application/x-www-form-urlencoded
 +00e7:
 +=> Send data, 50 bytes (0x32)
 +0000: SELECT * FROM membres where domaine LIKE "%peak%";
 +
 +</code>
 +
 +La requête en python doit passer en mode POST (selon la doc) et utiliser l'option "data" pour passer le contenu exact de la requête en mode POST.
 +
 +En mode GET, utiliser l'options "params".
 +
 +<code>
 +import requests
 +from requests.auth import HTTPBasicAuth
 +URL='https://assos-zourit-net.garradin.eu/api/sql/'
 +
 +reponse = requests.post(URL,auth=HTTPBasicAuth('userapi', 'motdepasseAPI'),data='SELECT * FROM membres where domaine LIKE "%truc%";')
 +print(reponse.json())
 +
 +</code>
 +
 +On peut utiliser la methode ''prepare()'' pour voir le contenu exact des datas envoyés :
 +<code>
 +prepared = requests.Request('POST',URL,auth=HTTPBasicAuth('XX', 'XX'),data={'q': 'SELECT * FROM membres where domaine LIKE "%peak%";'}).prepare()
 +print(prepared.body)
 +
 +</code>
 +
 ===== Tests requêtes / résultats JSON ===== ===== Tests requêtes / résultats JSON =====
  
 Des outils pour tester les envois / receptions de requetes : Des outils pour tester les envois / receptions de requetes :
  
-  * https://webhook.site : pour tester le résultat reçu puor un webhook en json +  * [[https://webhook.site|https://webhook.site]] : pour tester le résultat reçu puor un webhook en json 
-  * https://postb.in/ pour voir le résultat des headers et le début du json (mais pas tout) +  * [[https://postb.in/|https://postb.in/]] pour voir le résultat des headers et le début du json (mais pas tout) 
-  * http://requestbin.net/ : pour le résultat en ligne (pour curl par exemple) +  * [[http://requestbin.net/|http://requestbin.net/]] : pour le résultat en ligne (pour curl par exemple) 
-  * https://bin.webhookrelay.com : un autre Json complet+  * [[https://bin.webhookrelay.com|https://bin.webhookrelay.com]] : un autre Json complet
   * Avec curl :   * Avec curl :
- 
 <code> <code>
 +
 curl -v -i -X POST -H "Content-Type: application/json" --data '{ "username": "siel", "password": "blarblarf" }' "https://cemea.axelor.com/graf/login.jsp" curl -v -i -X POST -H "Content-Type: application/json" --data '{ "username": "siel", "password": "blarblarf" }' "https://cemea.axelor.com/graf/login.jsp"
  
 </code> </code>
 +
   * avec [[https://httpie.org|httpie]] (paquet à installer) et un fichier d'une requete json dans un fichier.json :   * avec [[https://httpie.org|httpie]] (paquet à installer) et un fichier d'une requete json dans un fichier.json :
 <code> <code>
  
-http POST httpbin.org/post <fichier.json+http POST monurl.org/post <fichier.json
  
 </code> </code>
 +
 +Voir la doc complète [[https://httpie.org/docs#json|https://httpie.org/docs#json]] par exemple :
 +
 +<code bash>
 +echo '{"hello": "world"}' | http POST monurl.org/post
 +
 +
 +</code>
 +===== Utilisation de json dans une requête sur une API avec un json complexe en python =====
 +
 +Exemple avec petit-rapporteur :
 +<code>
 +
 +jsontext = """{
 +    "comment": "CPO EN 2023 v2 - Accès MONAT",
 +    "policies": [
 +    {
 +        "report_id": "MONRAPPORT",
 +        "field_id": "*",
 +        "actions": [
 +          "report:read",
 +          "report:write"
 +        ],
 +        "filters": [
 +            {
 +            "field_name": "AT",
 +            "field_data": "MONAT"
 +            }
 +        ]
 +    }
 +    ]
 +    }"""
 +
 +</code>
 +
 +Et la requête :
 +
 +<code>
 +r = requests.post(apiurl, json=json.loads(jsontext), headers=headers)
 +print(r.text)
 +data = r.json()
 +
 +</code>
 +
 +json.loads : transforme une string au format long en format json.
  
  
  • technique/python/api_python.txt
  • Dernière modification : 2024/04/02 15:08
  • de 127.0.0.1