2011-10-13 6 views
63

Esiste un modo standard per ottenere dati JSON dal servizio RESTful utilizzando Python?Come ottengo i dati JSON dal servizio RESTful usando Python?

Ho bisogno di usare kerberos per l'autenticazione.

un po 'di snippet sarebbe d'aiuto.

+0

Questo può aiutare http://stackoverflow.com/questions/ 713847/recommendations-of-python-rest-web-services-framework –

+1

Non sto guardando "Python - ** basati su framework REST". Voglio usare il servizio RESTful fornito da alcuni server java in python. Grazie comunque. – Bala

risposta

67

Qualcosa del genere dovrebbe funzionare a meno che non mi manca il punto:

import json 
import urllib2 
json.load(urllib2.urlopen("url")) 
+0

funzionerebbe se non ci sono credenziali necessarie per passare. Ma ottengo questo errore "urllib2.HTTPError: HTTP 401: non autorizzato" – Bala

+0

Da dove stai cercando di scaricare? – Trufa

+1

Ho bisogno di usare l'autenticazione Kerberos. Scusate, ho dimenticato di menzionare in questione. – Bala

3

Beh, prima di tutto penso di implementare la propria soluzione per questo tutto ciò che serve è urllib2 o httplib2. In ogni caso, nel caso in cui sia necessario un client REST generico, verificarlo.

https://github.com/scastillo/siesta

Tuttavia penso che il set di funzionalità della biblioteca non funziona per la maggior parte dei servizi web, perché essi probabilmente utilizzando OAuth, ecc ... Inoltre non mi piace il fatto che sia scritto su httplib che è un dolore rispetto a httplib2 dovrebbe comunque funzionare per te se non devi gestire molti reindirizzamenti ecc.

98

Vorrei dare il La libreria requests prova per questo. Essenzialmente solo un wrapper molto più semplice da usare attorno ai moduli di libreria standard (vale a dire urllib2, httplib2, ecc.) Che useresti per la stessa cosa. Ad esempio, per recuperare i dati JSON da un URL che richiede l'autenticazione di base sarebbe simile a questa:

import requests 

response = requests.get('http://thedataishere.com', 
         auth=('user', 'password')) 
data = response.json() 

per l'autenticazione Kerberos il requests project ha biblioteca reqests-kerberos che fornisce una classe autenticazione Kerberos che è possibile utilizzare con requests:

import requests 
from requests_kerberos import HTTPKerberosAuth 

response = requests.get('http://thedataishere.com', 
         auth=HTTPKerberosAuth()) 
data = response.json() 
+4

Se ti manca il modulo 'requests', fai semplicemente:' pip install request'. Maggiori informazioni e documenti [qui] (http://docs.python-requests.org/en/latest/user/install/) – gudthing

+0

ecco perché la mia risposta JSON diventa con te prima della chiave, coppia di valori? * {u'status ': u'FINISHED', u'startTime ': u'2016-11-08T15: 32: 33.241Z', u'jobId ': u'f9d71eaa-d439-4a39-a258-54220b14f1b8', u 'context': u'sql-context ', u'duration': u'0.061 secs '} * –

23

Fondamentalmente è necessario effettuare una richiesta HTTP al servizio, quindi analizzare il corpo della risposta. Mi piace usare httplib2 per esso:

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) 
+1

Grazie a questo funziona –

7

Se si desidera utilizzare Python 3, è possibile utilizzare il seguente:

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')) 
+0

In che modo usa kerberos per l'autenticazione? – Foon