Python kullanarak RESTful hizmetinden JSON verisi almanın standart bir yolu var mı?
Kimlik doğrulama için kerbero kullanmam gerekiyor.
bazı pasajlar yardımcı olabilir.
Python kullanarak RESTful hizmetinden JSON verisi almanın standart bir yolu var mı?
Kimlik doğrulama için kerbero kullanmam gerekiyor.
bazı pasajlar yardımcı olabilir.
Yanıtlar:
Asıl noktayı kaçırmıyorsam böyle bir şey işe yaramalı:
import json
import urllib2
json.load(urllib2.urlopen("url"))
Bunun için istek kütüphanesine bir şans verirdim. Esasen, aynı şey için kullanacağınız standart kütüphane modülleri (yani urllib2, httplib2, vb.) Etrafında sarmalayıcı kullanmak çok daha kolaydır. Örneğin, temel kimlik doğrulama gerektiren bir url'den json verilerini almak şu şekilde görünür:
import requests
response = requests.get('http://thedataishere.com',
auth=('user', 'password'))
data = response.json()
Kerberos kimlik doğrulaması için, istek projesi , isteklerle kullanabileceğiniz bir kerberos kimlik doğrulama sınıfı sağlayan reqests-kerberos kitaplığına sahiptir :
import requests
from requests_kerberos import HTTPKerberosAuth
response = requests.get('http://thedataishere.com',
auth=HTTPKerberosAuth())
data = response.json()
requests
modülü, sadece yapın: pip install requests
. Daha fazla bilgi ve dokümanlar burada
Temel olarak hizmete bir HTTP isteği göndermeniz ve ardından yanıtın gövdesini ayrıştırmanız gerekir. Bunun için httplib2 kullanmayı seviyorum:
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'ü kullanmak istiyorsanız, aşağıdakileri kullanabilirsiniz:
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'))
Öncelikle bunun için kendi çözümünüzü sunmanın tek ihtiyacınız olan urllib2 veya httplib2 olduğunu düşünüyorum. Her neyse, genel bir REST istemcisine ihtiyacınız olursa, bunu kontrol edin.
https://github.com/scastillo/siesta
Bununla birlikte, kütüphanenin özellik setinin çoğu web servisi için çalışmayacağını düşünüyorum çünkü muhtemelen oauth vb. Kullanacaklardır. Ayrıca, httplib2 ile karşılaştırıldığında bir sıkıntı olan httplib üzerine yazılması hoşuma gitmiyor, eğer çok fazla yeniden yönlendirme vb. İle uğraşmak zorunda değilseniz, yine de sizin için çalışmalı.