Pregunta ¿Cómo obtengo los datos JSON del servicio RESTful utilizando Python?


¿Hay alguna forma estándar de obtener datos JSON del servicio RESTful utilizando Python?

Necesito usar kerberos para autenticación.

algún fragmento ayudaría.


74
2017-10-13 07:07


origen


Respuestas:


Algo como esto debería funcionar a menos que me esté faltando el punto:

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

73
2017-10-13 07:46



Yo daría el peticiones biblioteca una prueba para esto. Básicamente, es una envoltura mucho más fácil de usar que los módulos de biblioteca estándar (es decir, urllib2, httplib2, etc.) que usaría para lo mismo. Por ejemplo, para obtener datos json de una url que requiere autenticación básica se vería así:

import requests

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

Para la autenticación Kerberos, proyecto de solicitudes tiene el reqests-kerberos biblioteca que proporciona una clase de autenticación kerberos que puede usar con peticiones:

import requests
from requests_kerberos import HTTPKerberosAuth

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

109
2017-10-13 07:45



Básicamente, debe realizar una solicitud HTTP al servicio y luego analizar el cuerpo de la respuesta. Me gusta usar httplib2 para ello:

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)

24
2017-10-13 07:53



Si desea usar Python 3, puede usar lo siguiente:

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

7
2017-07-11 23:07



Bueno, antes que nada, creo que al implementar su propia solución para esto, todo lo que necesita es urllib2 o httplib2. De todas formas, en caso de que requiera un cliente REST genérico, mire esto.

https://github.com/scastillo/siesta

Sin embargo, creo que el conjunto de características de la biblioteca no funcionará para la mayoría de los servicios web porque probablemente usarán oauth, etc. Además, no me gusta el hecho de que está escrito en httplib, lo que es un dolor en comparación con httplib2, aún debería funcionar para usted si no tiene que manejar una gran cantidad de redirecciones, etc.


3
2017-10-13 07:39