Чи існує якийсь стандартний спосіб отримання даних JSON із сервісу RESTful за допомогою Python?
Мені потрібно використовувати kerberos для автентифікації.
якийсь фрагмент допоможе.
Чи існує якийсь стандартний спосіб отримання даних JSON із сервісу RESTful за допомогою Python?
Мені потрібно використовувати kerberos для автентифікації.
якийсь фрагмент допоможе.
Відповіді:
Щось подібне повинно працювати, якщо я не пропустив суть:
import json
import urllib2
json.load(urllib2.urlopen("url"))
Я спробував би бібліотеку запитів для цього. По суті просто набагато простіший у використанні обгортка навколо стандартних бібліотечних модулів (тобто urllib2, httplib2 тощо), який ви використовували б для того самого. Наприклад, для отримання даних json з URL-адреси, яка вимагає базової автентифікації, виглядатиме так:
import requests
response = requests.get('http://thedataishere.com',
auth=('user', 'password'))
data = response.json()
Для аутентифікації kerberos проект запитів має бібліотеку reqests-kerberos, яка забезпечує клас аутентифікації kerberos, який можна використовувати із запитами :
import requests
from requests_kerberos import HTTPKerberosAuth
response = requests.get('http://thedataishere.com',
auth=HTTPKerberosAuth())
data = response.json()
requests
модуль, просто зробити: pip install requests
. Більше інформації та документів тут
Вам в основному потрібно зробити HTTP-запит до служби, а потім проаналізувати тіло відповіді. Я люблю використовувати для цього 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)
Якщо ви хочете використовувати Python 3, ви можете скористатися наступним:
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'))
Ну, перш за все, я думаю, що для цього потрібно розробити своє власне рішення, а все, що вам потрібно - це urllib2 або httplib2. У будь-якому випадку, якщо вам потрібен загальний клієнт REST, перевірте це.
https://github.com/scastillo/siesta
Однак я думаю, що набір функцій бібліотеки не буде працювати для більшості веб-служб, оскільки вони, ймовірно, використовуватимуть oauth тощо. Також мені не подобається той факт, що він написаний через httplib, що є біль у порівнянні з httplib2, все одно повинен працювати для вас, якщо вам не доводиться обробляти багато переспрямувань тощо.