Gibt es eine Standardmethode zum Abrufen von JSON-Daten vom RESTful-Dienst mithilfe von Python?
Ich muss Kerberos zur Authentifizierung verwenden.
Ein Ausschnitt würde helfen.
Gibt es eine Standardmethode zum Abrufen von JSON-Daten vom RESTful-Dienst mithilfe von Python?
Ich muss Kerberos zur Authentifizierung verwenden.
Ein Ausschnitt würde helfen.
Antworten:
So etwas sollte funktionieren, es sei denn, ich verpasse den Punkt:
import json
import urllib2
json.load(urllib2.urlopen("url"))
Ich würde die Anforderungsbibliothek dafür versuchen. Im Wesentlichen nur ein viel einfacher zu verwendender Wrapper um die Standardbibliotheksmodule (z. B. urllib2, httplib2 usw.), die Sie für dasselbe verwenden würden. Das Abrufen von JSON-Daten von einer URL, für die eine grundlegende Authentifizierung erforderlich ist, sieht beispielsweise folgendermaßen aus:
import requests
response = requests.get('http://thedataishere.com',
auth=('user', 'password'))
data = response.json()
Für die Kerberos-Authentifizierung verfügt das Anforderungsprojekt über die Bibliothek reqests-kerberos, die eine Kerberos-Authentifizierungsklasse bereitstellt, die Sie für Anforderungen verwenden können :
import requests
from requests_kerberos import HTTPKerberosAuth
response = requests.get('http://thedataishere.com',
auth=HTTPKerberosAuth())
data = response.json()
requests
Modul vermissen , tun Sie einfach : pip install requests
. Weitere Infos und Dokumente hier
Grundsätzlich müssen Sie eine HTTP-Anforderung an den Dienst senden und dann den Hauptteil der Antwort analysieren. Ich benutze gerne httplib2 dafür:
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)
Wenn Sie Python 3 verwenden möchten, können Sie Folgendes verwenden:
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'))
Zunächst einmal denke ich, dass Sie nur urllib2 oder httplib2 einführen müssen, um eine eigene Lösung dafür zu finden. Falls Sie einen generischen REST-Client benötigen, überprüfen Sie dies.
https://github.com/scastillo/siesta
Ich denke jedoch, dass der Funktionsumfang der Bibliothek für die meisten Webdienste nicht funktioniert, da sie wahrscheinlich oauth usw. verwenden werden. Ich mag auch nicht die Tatsache, dass es über httplib geschrieben ist, was im Vergleich zu httplib2 ein Schmerz ist. Es sollte immer noch für Sie funktionieren, wenn Sie nicht viele Weiterleitungen usw. verarbeiten müssen.