पायथन का उपयोग करके मुझे RESTful सेवा से JSON डेटा कैसे मिलेगा?


82

क्या पायथन का उपयोग करके RESTful सेवा से JSON डेटा प्राप्त करने का कोई मानक तरीका है?

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

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


यह आपकी मदद कर सकता है stackoverflow.com/questions/713847/…
श्रीनाथ नन्नत

2
मैं "पायथन आधारित रीस्ट फ्रेमवर्क" नहीं देख रहा हूँ । मैं अजगर में कुछ जावा सर्वर द्वारा प्रदान की गई RESTful सेवा का उपयोग करना चाहता हूं। फिर भी धन्यवाद।
बाला

जवाबों:


78

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

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

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

आप कहां से डाउनलोड करने की कोशिश कर रहे हैं?
ट्रूफा

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

@BalamuruganK आप किस OS का उपयोग कर रहे हैं?
ट्रूफा

मैं यूनिक्स का उपयोग कर रहा हूं। Kerberos साथ लिब की कोशिश कर रहा टोकन प्राप्त करने के लिए यह httpConnection.putheader को पारित करने के लिए ( 'प्राधिकरण',?)
बाला

123

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

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()

5
यदि आप requestsमॉड्यूल को याद कर रहे हैं , तो बस करें pip install requests:। अधिक जानकारी और डॉक्स यहाँ
benscabbia

यहाँ क्यों मेरे json प्रतिक्रिया कुंजी, मूल्य जोड़ी से पहले यू के साथ हो जाते हैं? {u'status ': u'FINISHED', u'startTime ': u'2016-11-08T15: 32: 33.241Z', u'jobId ': u'f9d71eaa-d439-4a39-a258-54220b14f1b8', u ' संदर्भ ': u-aql-reference', u'duration ': u'0.061 secs'}
KARTHIKEYAN.A

27

आपको मूल रूप से सेवा के लिए HTTP अनुरोध करने की आवश्यकता है, और फिर प्रतिक्रिया के मुख्य भाग को पार्स करें। मैं इसके लिए CANplib2 का उपयोग करना पसंद करता हूं:

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)

10

यदि आप पायथन 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'))

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

3

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

https://github.com/scastillo/siesta

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.