web-dev-qa-db-fra.com

Comment obtenir des données JSON du service RESTful à l'aide de Python?

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.

78
Bala

Quelque chose comme ça devrait marcher à moins que je manque le point:

import json
import urllib2
json.load(urllib2.urlopen("url"))
77
Trufa

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()
117
Mark Gemmill

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)
27
Christo Buschek

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'))
8
Andre Wisplinghoff

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.

3
dusual