Czy istnieje standardowy sposób pobierania danych JSON z usługi RESTful przy użyciu języka Python?
Do uwierzytelnienia potrzebuję protokołu Kerberos.
jakiś fragment mógłby pomóc.
Czy istnieje standardowy sposób pobierania danych JSON z usługi RESTful przy użyciu języka Python?
Do uwierzytelnienia potrzebuję protokołu Kerberos.
jakiś fragment mógłby pomóc.
Odpowiedzi:
Coś takiego powinno działać, chyba że nie rozumiem:
import json
import urllib2
json.load(urllib2.urlopen("url"))
Dałbym żądań Library okazję do tego. Zasadniczo jest to po prostu dużo łatwiejsze w użyciu opakowanie wokół standardowych modułów biblioteki (tj. Urllib2, httplib2 itp.), Których używałbyś do tego samego. Na przykład pobranie danych json z adresu URL wymagającego podstawowego uwierzytelnienia wyglądałoby następująco:
import requests
response = requests.get('http://thedataishere.com',
auth=('user', 'password'))
data = response.json()
W przypadku uwierzytelniania Kerberos projekt żądań zawiera bibliotekę reqests-kerberos, która zapewnia klasę uwierzytelniania Kerberos, której można używać z żądaniami :
import requests
from requests_kerberos import HTTPKerberosAuth
response = requests.get('http://thedataishere.com',
auth=HTTPKerberosAuth())
data = response.json()
requests
modułu, po prostu zrobić: pip install requests
. Więcej informacji i dokumentów tutaj
Zasadniczo musisz wysłać żądanie HTTP do usługi, a następnie przeanalizować treść odpowiedzi. Lubię używać do tego httplib2:
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)
Jeśli chcesz używać Pythona 3, możesz użyć następujących:
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'))
Przede wszystkim myślę, że wdrożenie własnego rozwiązania do tego wszystkiego, czego potrzebujesz, to urllib2 lub httplib2. W każdym razie, jeśli potrzebujesz ogólnego klienta REST, sprawdź to.
https://github.com/scastillo/siesta
Jednak myślę, że zestaw funkcji biblioteki nie będzie działał dla większości usług internetowych, ponieważ prawdopodobnie będą one używać oauth itp.. Nie podoba mi się również fakt, że jest napisany przez httplib, co jest uciążliwe w porównaniu do httplib2, ale nadal powinno działać, jeśli nie musisz obsługiwać wielu przekierowań itp.