Есть ли стандартный способ получения данных 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, все равно должно работать для вас, если вам не нужно обрабатывать много перенаправлений и т. Д.