प्रमाणीकरण के साथ अजगर अनुरोध (access_token)


84

मैं अजगर में एक एपीआई क्वेरी प्राप्त करने की कोशिश कर रहा हूं। कमांड लाइन

curl --header "Authorization:access_token myToken" https://website.com/id

कुछ json आउटपुट देता है। myToken एक हेक्साडेसिमल चर है जो पूरे समय स्थिर रहता है। मैं अजगर से यह कॉल करना चाहूंगा ताकि मैं विभिन्न आईडी के माध्यम से लूप कर सकूं और आउटपुट का विश्लेषण कर सकूं। कोई विचार? प्रमाणीकरण की आवश्यकता होने से पहले मैंने urllib2 के साथ ऐसा किया है। मैंने भी अनुरोध मॉड्यूल पर एक नज़र डाली है, लेकिन यह पता नहीं लगा सका कि यह कैसे करना है।

बहुत धन्यवाद।


पूरे सत्र के लिए एक ऑर्केनिक टोकन सेट करना: stackoverflow.com/a/47043335/911945
एंटोन तारसेंको

जवाबों:


128

अनुरोध पैकेज HTTP अनुरोध के लिए एक बहुत अच्छा एपीआई है, इस तरह की एक कस्टम हेडर काम करता है जोड़ने ( स्रोत: सरकारी डॉक्स ):

>>> import requests
>>> response = requests.get(
... 'https://website.com/id', headers={'Authorization': 'access_token myToken'})

यदि आप बाहरी निर्भरता का उपयोग नहीं करना चाहते हैं, तो मानक पुस्तकालय के urllib2 का उपयोग करने वाली एक ही चीज इस तरह दिखती है ( स्रोत: अनुपलब्ध मैनुअल ):

>>> import urllib2
>>> response = urllib2.urlopen(
... urllib2.Request('https://website.com/id', headers={'Authorization': 'access_token myToken'})

आपके प्रतिक्रिया के लिए धन्येवाद। मैंने दोनों कार्यान्वयन की कोशिश की है और मुझे एक HTTP त्रुटि 401 मिली: अनधिकृत। हालाँकि, कमांड लाइन ठीक काम करती है। मैंने कभी भी एक्सेस टोकन के साथ काम नहीं किया है, इसलिए बस स्पष्ट होना चाहिए: मेरे पास टोकन है जो फॉर्म 3f4264ff आदि के 40 अंक हैं
user1895406

1
अजीब। मुझे क्या हो रहा है थोड़ा सा हेडर में बृहदान्त्र है ... आह! शायद मैं (या हम दोनों;) बस गलत पढ़ते हैं। शीर्षलेख को "प्राधिकरण" नाम दिया जा सकता है और उसका मूल्य तब "access_token long_hexadecimal_string" होगा। कि एक स्पिन देना चाहते हैं?
वॉस्क

वह काम किया! बहुत बहुत धन्यवाद। मैंने जो टाइप किया, वह url = ' website.com/id ' head = {'Authorization': 'access_token hex_string'} res = request.get (url, हेडर = हेड)
user1895406

1
यह समाधान संक्षिप्त या अन्यथा एनाकोंडा इंस्टॉल में काम नहीं कर रहा है।
ब्लडोट्रॉफ़

1
यह एक प्रमाणीकरण टोकन है जिसे सर्वर यह सत्यापित करने के लिए उपयोग करता है कि आप एपीआई तक पहुंच के लिए अधिकृत हैं। जिस सर्वर तक आप पहुँचना चाहते हैं उसके लिए आपको क्लाइंट क्रेडेंशियल (उपयोगकर्ता नाम, पासवर्ड, एपीआई कुंजी) प्राप्त करने की आवश्यकता है और फिर उन्हें (उदाहरण के लिए, एक अनुरोध प्राप्त करके) प्रमाणीकरण सर्वर पर भेजें। सर्वर एक स्ट्रिंग देता है जो आपके क्लाइंट के लिए JSON-एन्कोडेड हो सकती है और आप तब अपने API कॉल में टोकन के रूप में उपयोग करते हैं। कुछ और पढ़ने और कुछ उदाहरण देखने के लिए JWT या OAuth की खोज करें।
फिलिप

28

मुझे एक ही समस्या थी जब जीथब के साथ एक टोकन का उपयोग करने की कोशिश कर रहा था।

पायथन 3 के साथ मेरे लिए काम करने वाला एकमात्र वाक्य विन्यास है:

import requests

myToken = '<token>'
myUrl = '<website>'
head = {'Authorization': 'token {}'.format(myToken)}
response = requests.get(myUrl, headers=head)

यहां टोकन क्या होगा? या प्रमाणीकरण टोकन कैसे प्राप्त करें?
दीप जदिया

8
>>> import requests
>>> response = requests.get('https://website.com/id', headers={'Authorization': 'access_token myToken'})

यदि उपरोक्त काम नहीं करता है, तो यह कोशिश करें:

>>> import requests
>>> response = requests.get('https://api.buildkite.com/v2/organizations/orgName/pipelines/pipelineName/builds/1230', headers={ 'Authorization': 'Bearer <your_token>' })
>>> print response.json()

1
इस सप्ताह मेरे पास एक ही मुद्दा था और मेरे लिए काम करने का अधिकार प्राधिकरण का विकल्प था। निश्चित नहीं है कि इसमें कोई अंतर क्यों है, लेकिन कोशिश करने और सफलतापूर्वक काम करने के लिए मेरे लिए वह विकल्प प्रदान करने के लिए धन्यवाद!
रयान हैरिस

@SowmiyaRagu दूसरा भाग मेरे लिए काम करता है, Bearer <my_token>जबकि पहला नहीं क्योंकि प्रतिक्रिया इस तरह से है जैसे अनुरोध प्रमाणित नहीं है।
हाइड्रैडन

2

क्या आपने uncurlपैकेज ( https://github.com/spulec/uncurl ) आज़माया है ? तुम्हें पता है, पिप के माध्यम से स्थापित कर सकते हैं pip install uncurl। आपका कर्ल अनुरोध रिटर्न:

>>> uncurl "curl --header \"Authorization:access_token myToken\" https://website.com/id"

requests.get("https://website.com/id",
    headers={
        "Authorization": "access_token myToken"
    },
    cookies={},
)

1

मैं थोड़ा संकेत जोड़ूंगा: ऐसा लगता है कि आप एक हेडर के प्रमुख मूल्य के रूप में जो पास करते हैं वह आपके प्राधिकरण प्रकार पर निर्भर करता है, मेरे मामले में PRIVATE-TOKEN

header = {'PRIVATE-TOKEN': 'my_token'}
response = requests.get(myUrl, headers=header)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.