¿Existe alguna forma estándar de obtener datos JSON del servicio RESTful usando Python?
Necesito usar kerberos para la autenticación.
algún fragmento ayudaría.
¿Existe alguna forma estándar de obtener datos JSON del servicio RESTful usando Python?
Necesito usar kerberos para la autenticación.
algún fragmento ayudaría.
Respuestas:
Algo como esto debería funcionar a menos que me pierda el punto:
import json
import urllib2
json.load(urllib2.urlopen("url"))
Le daría una oportunidad a la biblioteca de solicitudes para esto. Esencialmente, un contenedor mucho más fácil de usar alrededor de los módulos de la 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, el proyecto de solicitudes tiene la biblioteca reqests-kerberos que proporciona una clase de autenticación kerberos que puede usar con las solicitudes :
import requests
from requests_kerberos import HTTPKerberosAuth
response = requests.get('http://thedataishere.com',
auth=HTTPKerberosAuth())
data = response.json()
requests
módulo, sólo tiene que hacer: pip install requests
. Más información y documentos aquí
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)
Si desea utilizar Python 3, puede utilizar 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'))
Bueno, en primer lugar, creo que implementar su propia solución para esto, todo lo que necesita es urllib2 o httplib2. De todos modos, en caso de que necesite un cliente REST genérico, consulte 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 sobre httplib, que es un fastidio en comparación con httplib2, pero debería funcionar para usted si no tiene que manejar muchas redirecciones, etc.