2011-10-13 15 views
63

क्या Python का उपयोग कर रीस्टफुल सेवा से JSON डेटा प्राप्त करने का कोई मानक तरीका है?पाइथन का उपयोग कर रीस्टफुल सेवा से JSON डेटा कैसे प्राप्त करूं?

मुझे प्रमाणीकरण के लिए केर्बेरो का उपयोग करने की आवश्यकता है।

कुछ स्निपेट मदद करेंगे।

+0

http://stackoverflow.com/questions/ 713847/सिफारिश-के-पायथन-आराम-वेब-सेवाओं-ढांचे –

+1

मैं "पायथन - ** आधारित ** आरईएसटी फ्रेमवर्क" नहीं देख रहा हूं। मैं पाइथन में कुछ जावा सर्वर द्वारा प्रदान की गई रीस्टफुल सेवा का उपयोग करना चाहता हूं। फिर भी धन्यवाद। – Bala

उत्तर

67

जब तक कि मैं बिंदु याद कर रहा हूँ इस तरह काम करना चाहिए:

import json 
import urllib2 
json.load(urllib2.urlopen("url")) 
+0

यह काम करेगा यदि पास करने के लिए कोई क्रेडेंशियल आवश्यक नहीं है। लेकिन मुझे यह "urllib2.HTTPError: HTTP त्रुटि 401: अनधिकृत" त्रुटि – Bala

+0

कहां से डाउनलोड करने का प्रयास कर रहे हैं? – Trufa

+1

मुझे केर्बेरो प्रमाणीकरण का उपयोग करने की आवश्यकता है। क्षमा करें, मैं सवाल में उल्लेख करना भूल गया। – Bala

3

सबसे पहले मुझे लगता है कि आपको अपने स्वयं के समाधान को रोल करने की ज़रूरत है, आपको केवल urllib2 या httplib2 की आवश्यकता है। वैसे भी यदि आपको सामान्य आरईएसटी क्लाइंट की आवश्यकता होती है तो इसे जांचें।

https://github.com/scastillo/siesta

हालांकि मुझे लगता है कि पुस्तकालय की सुविधा सेट, क्योंकि वे शायद OAuth आदि का उपयोग करेगा सबसे वेब सेवाओं के लिए काम नहीं करेगा ..। इसके अलावा मुझे यह तथ्य पसंद नहीं है कि यह प्रेजेंटप्लिब पर लिखा गया है जो कि पीडीएफप्लिब 2 की तुलना में दर्द है, यदि आपको बहुत सी रीडायरेक्शन इत्यादि को संभालने की ज़रूरत नहीं है तो आपको अभी भी काम करना चाहिए ..

98

मैं requests लाइब्रेरी इसके लिए प्रयास करें। अनिवार्य रूप से मानक लाइब्रेरी मॉड्यूल के आसपास रैपर का उपयोग करना बहुत आसान है (यानी urllib2, httplib2, आदि) आप एक ही चीज़ के लिए उपयोग करेंगे। उदाहरण के लिए, एक यूआरएल है कि बुनियादी प्रमाणीकरण की आवश्यकता से json डेटा प्राप्त करने का इस प्रकार दिखाई देगा:

:

import requests 

response = requests.get('http://thedataishere.com', 
         auth=('user', 'password')) 
data = response.json() 

Kerberos प्रमाणीकरण के लिए requests project जो एक Kerberos प्रमाणीकरण वर्ग है कि आप requests साथ उपयोग कर सकते हैं प्रदान करता है reqests-kerberos पुस्तकालय है

import requests 
from requests_kerberos import HTTPKerberosAuth 

response = requests.get('http://thedataishere.com', 
         auth=HTTPKerberosAuth()) 
data = response.json() 
+4

यदि आप 'अनुरोध' मॉड्यूल खो रहे हैं, तो बस करें: 'पाइप इंस्टॉल अनुरोध'। अधिक जानकारी और दस्तावेज़ [यहां] (http://docs.python-requests.org/en/latest/user/install/) – gudthing

+0

यहां क्यों मेरी जेसन प्रतिक्रिया कुंजी, मूल्य जोड़ी से पहले आपके साथ क्यों बनती है? * {u'status ': u'FINISHED', u'startTime ': u'2016-11-08T15: 32: 33.241Z', u'jobId ': u'f9d71eaa-d439-4a39-a258-54220b14f1b8', u 'संदर्भ': u'sql-context ', u'duration': u'0.061 secs '} * –

23

आपको मूल रूप से सेवा के लिए HTTP अनुरोध करने की आवश्यकता है, और फिर प्रतिक्रिया के शरीर को पार्स करें।

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) 
+1

धन्यवाद यह –

7

आप अजगर 3 उपयोग करने के लिए चाहते हैं, तो आप निम्न का उपयोग कर सकते हैं:: मैं इसके लिए httplib2 का उपयोग करना चाहते यह आपको मदद मिल सकती है

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')) 
+0

यह काम करता है प्रमाणीकरण के लिए केर्बेरो का उपयोग कैसे करता है? – Foon

संबंधित मुद्दे