Wie erhalte ich JSON-Daten vom RESTful-Dienst mit Python?

82

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.

Bala
quelle
Dies kann Ihnen helfen stackoverflow.com/questions/713847/…
Sreenath Nannat
2
Ich freue mich nicht auf "Python- basierte REST-Frameworks". Ich möchte den RESTful-Dienst verwenden, der von einem Java-Server in Python bereitgestellt wird. Danke trotzdem.
Bala

Antworten:

78

So etwas sollte funktionieren, es sei denn, ich verpasse den Punkt:

import json
import urllib2
json.load(urllib2.urlopen("url"))
Trufa
quelle
Dies würde funktionieren, wenn kein Berechtigungsnachweis zum Bestehen erforderlich ist. Aber ich bekomme diesen Fehler "urllib2.HTTPError: HTTP Error 401: Unauthorized"
Bala
Woher möchten Sie herunterladen?
Trufa
1
Ich muss die Kerberos-Authentifizierung verwenden. Entschuldigung, ich habe vergessen, in Frage zu erwähnen.
Bala
@ BalamuruganK Welches Betriebssystem verwenden Sie?
Trufa
Ich benutze Unix. versuchen mit kerberos lib, Token zu bekommen, um es an httpConnection.putheader ('Authorization' ,?) zu übergeben
Bala
122

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()
Mark Gemmill
quelle
5
Wenn Sie das requestsModul vermissen , tun Sie einfach : pip install requests. Weitere Infos und Dokumente hier
Benscabbia
hier, warum wird meine json-Antwort mit u vor dem Schlüssel-Wert-Paar? {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'}
KARTHIKEYAN.A
27

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)
Christo Buschek
quelle
10

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'))
Andre Wisplinghoff
quelle
Wie wird Kerberos zur Authentifizierung verwendet?
Foon
3

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.

dusual
quelle