Existe-t-il un moyen standard d’obtenir des données JSON du service RESTful à l’aide de Python?
J'ai besoin d'utiliser Kerberos pour l'authentification.
un extrait aiderait.
Quelque chose comme ça devrait marcher à moins que je manque le point:
import json
import urllib2
json.load(urllib2.urlopen("url"))
Je donnerais à la bibliothèque demandes un essai pour cela. Essentiellement, un wrapper beaucoup plus facile à utiliser autour des modules de bibliothèque standard (par exemple, urllib2, httplib2, etc.) que vous utiliseriez pour la même chose. Par exemple, pour extraire des données JSON d'une url nécessitant une authentification de base, cela ressemble à ceci:
import requests
response = requests.get('http://thedataishere.com',
auth=('user', 'password'))
data = response.json()
Pour l'authentification Kerberos, la bibliothèque request project possède la bibliothèque reqests-kerberos qui fournit une classe d'authentification Kerberos que vous pouvez utiliser avec requêtes :
import requests
from requests_kerberos import HTTPKerberosAuth
response = requests.get('http://thedataishere.com',
auth=HTTPKerberosAuth())
data = response.json()
En gros, vous devez envoyer une requête HTTP au service, puis analyser le corps de la réponse. J'aime utiliser httplib2 pour cela:
import httplib2 as http
import json
try:
from urlparse import urlparse
except ImportError:
from urllib.parse import urlparse
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json; charset=UTF-8'
}
uri = 'http://yourservice.com'
path = '/path/to/resource/'
target = urlparse(uri+path)
method = 'GET'
body = ''
h = http.Http()
# If you need authentication some example:
if auth:
h.add_credentials(auth.user, auth.password)
response, content = h.request(
target.geturl(),
method,
body,
headers)
# assume that content is a json reply
# parse content with the json module
data = json.loads(content)
Si vous souhaitez utiliser Python 3, vous pouvez utiliser les éléments suivants:
import json
import urllib.request
req = urllib.request.Request('url')
with urllib.request.urlopen(req) as response:
result = json.loads(response.readall().decode('utf-8'))
Eh bien tout d’abord, je pense que pour déployer votre propre solution, il suffit d’urllib2 ou de httplib2. Quoi qu’il en soit, si vous avez besoin d’un client générique REST, vérifiez-le.
https://github.com/scastillo/siesta
Cependant, je pense que l'ensemble des fonctionnalités de la bibliothèque ne fonctionnera pas pour la plupart des services Web, car ils utiliseront probablement oauth etc.). De plus, je n'aime pas le fait qu'il soit écrit sur httplib qui est une douleur par rapport à httplib2 devrait quand même fonctionner pour vous si vous n'avez pas à gérer beaucoup de redirections, etc.