Nie szukam " frameworków REST opartych na Pythonie". Chcę skorzystać z usługi RESTful dostarczanej przez jakiś serwer java w Pythonie. W każdym razie dzięki.
Bala
Odpowiedzi:
78
Coś takiego powinno działać, chyba że nie rozumiem:
to zadziała, jeśli nie ma poświadczeń wymaganych do przejścia. Ale pojawia się ten błąd „urllib2.HTTPError: HTTP Error 401: Unauthorized”
Bala
Skąd próbujesz pobrać?
Trufa
1
Muszę używać uwierzytelniania Kerberos. Przepraszam, zapomniałem wspomnieć o pytaniu.
Bala
@BalamuruganK jakiego systemu operacyjnego używasz?
Trufa
Używam unixa. próba z kerberos lib, aby uzyskać token, aby przekazać go do httpConnection.putheader ('Authorization',?)
Bala
124
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()
Jeśli brakuje requestsmodułu, po prostu zrobić: pip install requests. Więcej informacji i dokumentów tutaj
benscabbia
dlaczego moja odpowiedź json staje się u przed parą klucz, wartość? {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
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.
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.
Odpowiedzi:
Coś takiego powinno działać, chyba że nie rozumiem:
import json import urllib2 json.load(urllib2.urlopen("url"))
źródło
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()
źródło
requests
modułu, po prostu zrobić:pip install requests
. Więcej informacji i dokumentów tutajZasadniczo 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)
źródło
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'))
źródło
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.
źródło