वेब रिक्वेस्ट्स: एक त्वरित समीक्षा
जब आप पायथन में एक एप्लिकेशन बना रहे होते हैं, तो ऐसा समय आ सकता है जब आप किसी थर्ड-पार्टी सर्विस से जुड़ना चाहें। उदाहरण के लिए, यदि आप एक फिटनेस टूल बना रहे हैं तो आप अपने व्यायाम डेटा को देखने के लिए Fitbit API से जुड़ना चाह सकते हैं; एक ऐप जो टेक्स्ट मैसेज भेज सकता है वह Twilio API से जुड़ सकता है।
पायथन में, requests लाइब्रेरी आपको रिक्वेस्ट्स बनाने की अनुमति देती है ताकि आप थर्ड-पार्टी वेब सर्विसेज को अपने एप्लिकेशन से जोड़ सकें। इस गाइड में, हम पायथन requests लाइब्रेरी के बारे में जानेंगे और आप HTTP रिक्वेस्ट्स भेजने के लिए इसका उपयोग कैसे कर सकते हैं।
वेब रिक्वेस्ट्स: एक रीफ्रेशर
रिक्वेस्ट्स इंटरनेट के केंद्र में हैं। जब आपने इस लेख पर क्लिक किया, तो Career Karma सर्वर पर एक HTTP रिक्वेस्ट भेजी गई। उस रिक्वेस्ट ने हमारे सर्वर्स को बताया कि आप कौन सा वेब पेज देखना चाहते हैं ताकि हमारा सर्वर पेज ढूंढ सके। एक बार वेब पेज मिल जाने पर, हमारे वेब सर्वर ने इसे आपके ब्राउज़र पर वापस लौटा दिया। यह प्रक्रिया आपको यह ट्यूटोरियल देखने की अनुमति देती है।
वेब रिक्वेस्ट्स कई अलग-अलग रूपों में आती हैं। आपके द्वारा इस वेब पेज को देखने के लिए की गई रिक्वेस्ट का प्रकार GET रिक्वेस्ट कहलाता है। इस प्रकार की रिक्वेस्ट आपको डेटा पुनः प्राप्त करने की अनुमति देती है। अन्य प्रकार की रिक्वेस्ट्स भी हैं जैसे POST और PUT, जिनका उपयोग सर्वर पर संसाधनों को संशोधित करने के लिए किया जाता है। इस ट्यूटोरियल के उद्देश्यों के लिए, हम GET और POST रिक्वेस्ट्स पर ध्यान केंद्रित करने जा रहे हैं।
Requests कैसे इंस्टॉल करें
Requests पायथन के लिए HTTP लाइब्रेरी है जो आपको वेब रिक्वेस्ट्स बनाने की अनुमति देती है।
इससे पहले कि हम पायथन का उपयोग करके वेब रिक्वेस्ट्स बना सकें, हमें पायथन requests कोड लाइब्रेरी इंस्टॉल करनी होगी। हम निम्न कमांड का उपयोग करके ऐसा कर सकते हैं:
pip install requests
अब जब हमने पायथन पैकेज डाउनलोड कर लिया है, तो हम वेब रिक्वेस्ट बनाने के लिए तैयार हैं।
GET रिक्वेस्ट कैसे बनाएं
आपके द्वारा की जाने वाली सबसे सामान्य प्रकार की वेब रिक्वेस्ट GET रिक्वेस्ट है। इस प्रकार की रिक्वेस्ट आपको सर्वर से डेटा पुनः प्राप्त करने की अनुमति देती है।
मान लीजिए हम एक ऐप बना रहे हैं जो आपको कैट फैक्ट्स की सूची पुनः प्राप्त करने की अनुमति देता है। ऐसा करने के लिए, हम cat-facts नामक एक API का उपयोग करने जा रहे हैं। यह API जनता के लिए खुला है, इसलिए हमें साइन इन करने के लिए किसी क्रेडेंशियल की आवश्यकता नहीं है। हम API पर रिक्वेस्ट करने के लिए इस कोड का उपयोग कर सकते हैं:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
print(res.status_code)
यह कोड लौटाता है: 200। आइए अपने कोड को समझते हैं।
पहली लाइन पर, हमने requests लाइब्रेरी आयात की। इसने हमें requests लाइब्रेरी तक पहुंचने की अनुमति दी जिसका उपयोग हम अपने ट्यूटोरियल में करेंगे। फिर हमने वेब रिक्वेस्ट बनाने के लिए requests.get() मेथड का उपयोग किया। हम .put() या .post() जैसे मेथड्स का उपयोग अन्य प्रकार की रिक्वेस्ट्स बनाने के लिए कर सकते थे, लेकिन इस मामले में हमें केवल cat-facts API से डेटा पुनः प्राप्त करने की आवश्यकता थी।
इसके बाद, हमने अपनी वेब रिक्वेस्ट से स्टेटस कोड प्रिंट किया। नंबर 200 लौटाया गया, जिसने हमें बताया कि हमारी वेब रिक्वेस्ट सफलतापूर्वक की गई थी। हम बाद में ट्यूटोरियल में चर्चा करेंगे कि इन नंबरों का क्या अर्थ है।
रिक्वेस्ट देखना
ऊपर हमारे उदाहरण में, हमने अपनी रिक्वेस्ट का स्टेटस कोड प्रिंट किया है। लेकिन हम अपने द्वारा पुनः प्राप्त किए गए डेटा को कैसे देख सकते हैं? कैट फैक्ट्स कहां हैं? यहीं पर .text और .json() मेथड्स काम आते हैं।
टेक्स्ट रिस्पांस देखें
हम अपनी वेब रिक्वेस्ट का परिणाम देखने के लिए .text मेथड का उपयोग कर सकते हैं:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
print(res.text)
यह कोड कैट फैक्ट्स की एक सूची लौटाता है। लेकिन, यह हमारे लिए बहुत व्यावहारिक नहीं है क्योंकि हम जिस डेटा को क्वेरी कर रहे हैं वह एक API है। जबकि हमारे पास अब कैट फैक्ट्स की एक पायथन सूची है, उन्हें पढ़ना हमारे लिए मुश्किल है क्योंकि वे प्लेन टेक्स्ट में हैं।
JSON रिस्पांस देखें
एक अधिक उपयोगी प्रारूप जिसमें हमारे कैट फैक्ट्स स्टोर किए जा सकते हैं वह JSON है। हम इस कोड का उपयोग करके अपनी रिक्वेस्ट से JSON डेटा पुनः प्राप्त कर सकते हैं:
print(res.json())
हमारा कोड कैट फैक्ट्स की एक लंबी सूची लौटाता है। यहाँ सूची में पहला रिकॉर्ड है:
{'_id': '58e009550aac31001185ed12', 'text': 'The oldest cat video on YouTube dates back to 1894.', 'type': 'cat', 'user': {'_id': '58e007480aac31001185ecef', 'name': {'first': 'Kasimir', 'last': 'Schulz'}}, 'upvotes': 6, 'userUpvoted': None}
सफलता! हम अपनी कैट फैक्ट्स की सूची पुनः प्राप्त करने में कामयाब रहे।
POST रिक्वेस्ट कैसे बनाएं
आप requests लाइब्रेरी का उपयोग POST रिक्वेस्ट बनाने के लिए भी कर सकते हैं। यह आपको वेब सर्वर पर स्टोर किए गए डेटा को संशोधित करने की अनुमति देगा।
इस उदाहरण के लिए, हम Airtable API का उपयोग करने जा रहे हैं। ऐसा इसलिए है क्योंकि हमें एक API की आवश्यकता है जो POST रिक्वेस्ट्स का समर्थन करता हो और cat-facts API केवल रीड-ओनली है।
मान लीजिए हमारे पास एक डेटाबेस है जहां हम पीने वाली सभी चाय के कप रिकॉर्ड करते हैं। हमने अभी चाय का एक और कप पिया है और हम इसे डेटाबेस में जोड़ना चाहते हैं। हम निम्न कोड का उपयोग करके ऐसा कर सकते हैं:
import requests
headers = {
'Authorization': 'Bearer API_KEY',
'Content-Type': 'application/json',
}
data = '{"records": [{"fields": {"Drink": "Black Decaf Tea"}}]}'
res = requests.post('https://api.airtable.com/v0/...', headers=headers, data=data)
print(res.json())
हमारा कोड लौटाता है:
{'records': [{'id': 'recqUEPuXEAXaNl1L', 'fields': {'Drink': 'Black Decaf Tea', 'Date': '2020-06-16T08:53:02.000Z'}, 'createdTime': '2020-06-16T08:53:02.000Z'}]}
यह हमें बताता है कि हमारी HTTP रिक्वेस्ट सफल रही। हमने अभी Airtable डेटाबेस में उनकी API का उपयोग करके एक रिकॉर्ड जोड़ा है। आइए इन कोड लाइनों पर आगे चर्चा करते हैं।
सबसे पहले, हमने requests लाइब्रेरी आयात की ताकि हम अपने कोड में HTTP रिक्वेस्ट्स बना सकें।
फिर हमने एक डिक्शनरी परिभाषित की जिसमें दो कुंजियाँ और मान थे: एक जो हमारे ऑथेंटिकेशन की को स्टोर करता था और दूसरा जो उस कंटेंट के प्रकार को निर्दिष्ट करता था जिसे हम वेब सर्वर पर भेज रहे थे। ये वे हेडर्स हैं जिन्हें Airtable API पर रिक्वेस्ट करने के लिए हमें भेजने की आवश्यकता थी।
अगला, हमने data नामक एक वेरिएबल घोषित किया जो उस डेटा को स्टोर करता था जिसे हम अपनी POST रिक्वेस्ट के साथ भेजना चाहते थे। इस मामले में, हम अपने डेटाबेस में "Black Decaf Tea" नामक एक ड्रिंक जोड़ रहे थे। फिर हमने requests.post() मेथड का उपयोग किया और अपने हेडर्स और डेटा को पैरामीटर्स के रूप में निर्दिष्ट किया, जिससे हमें Airtable API पर POST रिक्वेस्ट करने की अनुमति मिली।
अंत में, हमने res.json() का उपयोग करके अपनी रिक्वेस्ट के परिणाम को JSON फॉर्मेट में प्रिंट किया।
HTTP स्टेटस कोड्स
HTTP प्रोटोकॉल एक अद्वितीय स्टेटस कोड लौटाता है जब आप वेब रिक्वेस्ट करते हैं। यह आपको यह देखने की अनुमति देता है कि आपकी वेब रिक्वेस्ट सफल रही है या कोई त्रुटि हुई है। आपने शायद इनमें से कुछ पहले ही देखे होंगे, जैसे 404।
यहाँ एक रेफरेंस सूची है उन स्टेटस कोड्स की जिनका सामना आप पायथन requests के साथ रिक्वेस्ट करते समय कर सकते हैं:
- 1XX: सूचना
- 2XX: रिक्वेस्ट सफलतापूर्वक की गई
- 3XX: रिक्वेस्ट रीडायरेक्ट की गई
- 4XX: क्लाइंट-साइड त्रुटि
- 5XX: सर्वर-साइड त्रुटि
इन स्टेटस कोड्स को जानने से हमें अपने प्रोग्राम में डिबगिंग जोड़ने की अनुमति मिलती है। आइए पहले के cat-facts API उदाहरण से GET रिक्वेस्ट लें। मान लीजिए हम एक संदेश प्रिंट करना चाहते हैं यदि हम जिस संसाधन को एक्सेस कर रहे हैं वह नहीं मिल सकता। हम निम्न कोड का उपयोग करके ऐसा कर सकते हैं:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
if res.status_code == 200:
print("Success")
else:
print("Error")
हमारा कोड लौटाता है: Success। क्योंकि हमारी रिक्वेस्ट का स्टेटस कोड 200 है, "Success" संदेश कंसोल पर प्रिंट होता है। हालांकि, यदि हमारी रिक्वेस्ट विफल हो गई होती - उदाहरण के लिए, हमने एक अमान्य URL निर्दिष्ट किया हो - तो "Error" संदेश कंसोल पर प्रिंट होता।
निष्कर्ष
पायथन requests लाइब्रेरी आपको पायथन में HTTP रिक्वेस्ट्स बनाने की अनुमति देती है। इस गाइड में, हमने चर्चा की कि पायथन requests लाइब्रेरी का उपयोग GET और POST रिक्वेस्ट्स बनाने के लिए कैसे किया जाता है, लेकिन आप लाइब्रेरी का उपयोग करके PUT और DELETE रिक्वेस्ट्स भी बना सकते हैं।
जब आप requests.get() या requests.post() जैसे मेथड का उपयोग करते हैं, तो पायथन उस वेब संसाधन पर रिक्वेस्ट करेगा जिसे आप एक्सेस करना चाहते हैं। आप अपने रिक्वेस्ट के साथ हेडर्स और डेटा अटैच कर सकते हैं, जो आपको जानकारी भेजने की अनुमति देता है यदि आप किसी वेब संसाधन में बदलाव करना चाहते हैं जिसका आप स्वामित्व रखते हैं।
अब आप एक विशेषज्ञ की तरह पायथन requests लाइब्रेरी का उपयोग करना शुरू करने के लिए तैयार हैं!