Python के साथ cURL उपयोग करने की गाइड

16 सितम्बर 2024
5 मिनट पढ़ें
AI द्वारा जनरेट किया गया सारांश:

वेब स्क्रैपिंग में विश्लेषण, शोध, या ऑटोमेशन के लिए वेबसाइटों से डेटा निकालना शामिल है। इस cURL Python ट्यूटोरियल में, आप PycURL का उपयोग करके व्यावहारिक उदाहरणों के साथ वेब अनुरोध करना सीखेंगे। हम यह भी दिखाएंगे कि एक सामान्य curl को Python अनुरोध में कैसे बदलें और इसकी तुलना Requests, HTTPX, और AIOHTTP जैसी लाइब्रेरी के साथ कैसे करें।

Python में cURL कमांड का उपयोग कैसे करें

इस अवधारणा को समझना Python इंटीग्रेशन के लिए महत्वपूर्ण है, इसलिए आइए मूल बातें शुरू करते हैं। आप सीधे टर्मिनल में Python cURL कमांड का उपयोग करके GET और POST अनुरोध जैसे कार्य कर सकते हैं।

cURL कमांड के उदाहरण:


# GET अनुरोध
curl -X GET "https://httpbin.org/get"

# POST अनुरोध
curl -X POST "https://httpbin.org/post"

1.png

2.png

आवश्यक लाइब्रेरी इंस्टॉल करना

cURL का उपयोग करने के लिए, Python PycURL लाइब्रेरी इंस्टॉल करें।

इंस्टॉलेशन:


pip install pycurl

PycURL के साथ HTTP अनुरोध करना

Python में curl का उपयोग HTTP अनुरोधों पर विस्तृत नियंत्रण प्रदान करता है। नीचे एक उदाहरण है जो PycURL के साथ GET अनुरोध करना दिखाता है:


import pycurl
import certifi
from io import BytesIO

# प्रतिक्रिया डेटा रखने के लिए BytesIO ऑब्जेक्ट बनाएं
buffer = BytesIO()

# cURL ऑब्जेक्ट प्रारंभ करें
c = pycurl.Curl()

# HTTP GET अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'https://httpbin.org/get')

# आउटपुट डेटा कैप्चर करने के लिए बफ़र सेट करें
c.setopt(c.WRITEDATA, buffer)

# SSL/TLS सत्यापन के लिए CA बंडल फ़ाइल का पथ सेट करें
c.setopt(c.CAINFO, certifi.where())

# HTTP अनुरोध निष्पादित करें
c.perform()

# cURL ऑब्जेक्ट को बंद करना संसाधनों को मुक्त करता है
c.close()

# बफ़र से प्रतिक्रिया सामग्री प्राप्त करें
body = buffer.getvalue()

# प्रतिक्रिया बॉडी को डिकोड करें और प्रिंट करें
print(body.decode('iso-8859-1'))

POST अनुरोध को संभालना

POST के साथ डेटा भेजना – curl से Python अनुरोध – सामान्य है। लाइब्रेरी के साथ, POSTFIELDS विकल्प का उपयोग करें। यहाँ PycURL के साथ POST अनुरोध करने का उदाहरण है:


import pycurl
import certifi
from io import BytesIO

# प्रतिक्रिया डेटा रखने के लिए BytesIO ऑब्जेक्ट बनाएं
buffer = BytesIO()

# cURL ऑब्जेक्ट प्रारंभ करें
c = pycurl.Curl()

# HTTP POST अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'https://httpbin.org/post')

# पोस्ट किए जाने वाले डेटा को सेट करें
post_data = 'param1="pycurl"m2=article'
c.setopt(c.POSTFIELDS, post_data)

# आउटपुट डेटा कैप्चर करने के लिए बफ़र सेट करें
c.setopt(c.WRITEDATA, buffer)

# SSL/TLS सत्यापन के लिए CA बंडल फ़ाइल का पथ सेट करें
c.setopt(c.CAINFO, certifi.where())

# HTTP अनुरोध निष्पादित करें
c.perform()

# सिस्टम संसाधनों को मुक्त करने के लिए cURL ऑब्जेक्ट बंद करें
c.close()

# बफ़र से प्रतिक्रिया सामग्री प्राप्त करें
body = buffer.getvalue()

# प्रतिक्रिया बॉडी को डिकोड करें और प्रिंट करें
print(body.decode('iso-8859-1'))

कस्टम HTTP हेडर को संभालना

HTTP अनुरोधों के साथ अक्सर कस्टम हेडर या प्रमाणीकरण की आवश्यकता होती है। कस्टम हेडर को संभालना: HTTP अनुरोधों में अक्सर प्रमाणीकरण टोकन या कस्टम हेडर की आवश्यकता होती है। Python curl json parse तकनीकों का उपयोग करके कस्टम हेडर को कुशलतापूर्वक संभाला जा सकता है:


import pycurl
import certifi
from io import BytesIO

# प्रतिक्रिया डेटा रखने के लिए BytesIO ऑब्जेक्ट बनाएँ
buffer = BytesIO()

# एक cURL ऑब्जेक्ट प्रारंभ करें
c = pycurl.Curl()

# HTTP GET अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'https://httpbin.org/get')

# कस्टम HTTP हेडर सेट करें
c.setopt(c.HTTPHEADER, ['User-Agent: MyApp', 'Accept: application/json'])

# आउटपुट डेटा कैप्चर करने के लिए बफ़र सेट करें
c.setopt(c.WRITEDATA, buffer)

# SSL/TLS सत्यापन के लिए CA बंडल फ़ाइल का पथ सेट करें
c.setopt(c.CAINFO, certifi.where())

# HTTP अनुरोध निष्पादित करें
c.perform()

# समाप्त होने पर, सफाई के लिए cURL हैंडल बंद करें
c.close()

# बफ़र से प्रतिक्रिया की सामग्री प्राप्त करें
body = buffer.getvalue()

# प्रतिक्रिया बॉडी को डिकोड करें और प्रिंट करें
print(body.decode('iso-8859-1'))

XML प्रतिक्रियाओं को संभालना

XML पार्सिंग और विभिन्न API के साथ काम करते समय, XML प्रतिक्रियाओं को संभालना आवश्यक है। नीचे PycURL के साथ XML प्रतिक्रियाओं को संभालने का एक उदाहरण दिया गया है:


# आवश्यक लाइब्रेरी इंपोर्ट करें
import pycurl  # HTTP अनुरोध भेजने के लिए लाइब्रेरी
import certifi  # SSL प्रमाणपत्र सत्यापन के लिए लाइब्रेरी
from io import BytesIO  # बाइट स्ट्रीम संभालने के लिए लाइब्रेरी
import xml.etree.ElementTree as ET  # XML पार्स करने के लिए लाइब्रेरी

# प्रतिक्रिया डेटा रखने के लिए बफ़र बनाएं
buffer = BytesIO()

# एक cURL ऑब्जेक्ट प्रारंभ करें
c = pycurl.Curl()

# HTTP GET अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'https://www.google.com/sitemap.xml')

# आउटपुट डेटा कैप्चर करने के लिए बफ़र सेट करें
c.setopt(c.WRITEDATA, buffer)

# SSL/TLS सत्यापन के लिए CA बंडल फ़ाइल का पथ सेट करें
c.setopt(c.CAINFO, certifi.where())

# HTTP अनुरोध निष्पादित करें
c.perform()

# सिस्टम संसाधनों को मुक्त करने के लिए cURL ऑब्जेक्ट बंद करें
c.close()

# बफ़र से प्रतिक्रिया सामग्री प्राप्त करें
body = buffer.getvalue()

# XML सामग्री को ElementTree ऑब्जेक्ट के रूप में पार्स करें
root = ET.fromstring(body.decode('utf-8'))

# XML ट्री के रूट एलिमेंट का टैग और एट्रिब्यूट प्रिंट करें
print(root.tag, root.attrib)

HTTP त्रुटियों को संभालना

HTTP अनुरोधों में त्रुटियों को संभालना बाहरी इंटीग्रेशन के साथ काम करने का एक महत्वपूर्ण पहलू है। यहाँ PyCURL का उपयोग करके त्रुटि हैंडलिंग का उदाहरण दिया गया है:


import pycurl  # pycurl लाइब्रेरी इंपोर्ट करें
import certifi  # certifi लाइब्रेरी इंपोर्ट करें
from io import BytesIO  # बाइट स्ट्रीम संभालने के लिए BytesIO इंपोर्ट करें

# Curl ऑब्जेक्ट प्रारंभ करें
c = pycurl.Curl()

buffer = BytesIO()
# HTTP अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'http://example.com')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())

try:
    # HTTP अनुरोध निष्पादित करें
    c.perform()
except pycurl.error as e:
    # अगर अनुरोध के दौरान त्रुटि आती है, तो pycurl.error अपवाद को पकड़ें
    errno, errstr = e.args  # त्रुटि संख्या और संदेश प्राप्त करें
    print(f'Error: {errstr} (errno {errno})')  # त्रुटि संदेश और संख्या प्रिंट करें
finally:
    # सिस्टम संसाधनों को मुक्त करने के लिए cURL ऑब्जेक्ट बंद करें
    c.close()
    body = buffer.getvalue()
    print(body.decode('iso-8859-1'))  # प्रतिक्रिया बॉडी डिकोड करके प्रिंट करें

संशोधित कोड URL को https://example.com में बदलकर प्रोटोकॉल समस्या को हल करता है। इसके बाद, लेखक अनुरोध कॉन्फ़िगर करने, निष्पादित करने, और त्रुटियों को संभालने के वही चरण दोहराता है जो पहले स्निपेट में थे। सफल निष्पादन पर, प्रतिक्रिया बॉडी को फिर से डिकोड करके प्रिंट किया जाता है। यह सही URL बनाने, उचित अनुरोध प्रवाह बनाए रखने और सबसे महत्वपूर्ण, PycURL के साथ HTTP अनुरोध करते समय मजबूत त्रुटि हैंडलिंग लागू करने के महत्व पर जोर देता है।

3.png


import pycurl  # pycurl लाइब्रेरी इंपोर्ट करें
import certifi  # certifi लाइब्रेरी इंपोर्ट करें
from io import BytesIO  # बाइट स्ट्रीम संभालने के लिए BytesIO इंपोर्ट करें

# Curl ऑब्जेक्ट को फिर से प्रारंभ करें
c = pycurl.Curl()

buffer = BytesIO()
# सही HTTPS URL सेट करें
c.setopt(c.URL, 'https://example.com')
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.CAINFO, certifi.where())

try:
    # संशोधित HTTP अनुरोध निष्पादित करें
    c.perform()
except pycurl.error as e:
    # अगर अनुरोध के दौरान त्रुटि आती है, तो pycurl.error अपवाद को पकड़ें
    errno, errstr = e.args  # त्रुटि संख्या और संदेश प्राप्त करें
    print(f'Error: {errstr} (errno {errno})')  # त्रुटि संदेश और संख्या प्रिंट करें
finally:
    # सिस्टम संसाधनों को मुक्त करने के लिए cURL ऑब्जेक्ट बंद करें
    c.close()
    body = buffer.getvalue()
    print(body.decode('iso-8859-1'))  # प्रतिक्रिया बॉडी डिकोड करके प्रिंट करें

एडवांस्ड cURL फीचर्स

Python कन्वर्ज़न के साथ cURL अनुरोध पर काम करते समय, यह जानना उपयोगी है कि cURL HTTP व्यवहार को नियंत्रित करने के लिए कई उन्नत विकल्प प्रदान करता है, जैसे कुकीज़ और टाइमआउट को संभालना। नीचे एक उदाहरण दिया गया है जो Python में curl कमांड चलाने के एडवांस्ड विकल्प दिखाता है।


import pycurl  # pycurl लाइब्रेरी इंपोर्ट करें
import certifi  # SSL प्रमाणपत्र सत्यापन के लिए certifi लाइब्रेरी इंपोर्ट करें
from io import BytesIO  # बाइट स्ट्रीम संभालने के लिए BytesIO इंपोर्ट करें

# प्रतिक्रिया डेटा रखने के लिए बफ़र बनाएं
buffer = BytesIO()

# Curl ऑब्जेक्ट प्रारंभ करें
c = pycurl.Curl()

# HTTP अनुरोध के लिए URL सेट करें
c.setopt(c.URL, 'http://httpbin.org/cookies')

# कुकीज़ सक्षम करें और एक विशिष्ट key-value जोड़ी सेट करें
c.setopt(c.COOKIE, 'cookies_key=cookie_value')

# अनुरोध के लिए 30 सेकंड का टाइमआउट सेट करें
c.setopt(c.TIMEOUT, 30)

# आउटपुट डेटा कैप्चर करने के लिए बफ़र सेट करें
c.setopt(c.WRITEDATA, buffer)

# SSL/TLS सत्यापन के लिए CA बंडल फ़ाइल का पथ सेट करें
c.setopt(c.CAINFO, certifi.where())

# HTTP अनुरोध निष्पादित करें
c.perform()

# सिस्टम संसाधनों को मुक्त करने के लिए cURL ऑब्जेक्ट बंद करें
c.close()

# बफ़र से प्रतिक्रिया की सामग्री प्राप्त करें
body = buffer.getvalue()

# UTF-8 एन्कोडिंग का उपयोग करके प्रतिक्रिया बॉडी डिकोड करें और प्रिंट करें
print(body.decode('utf-8'))

PycURL, Requests, HTTPX, और AIOHTTP की तुलना

Python में HTTP अनुरोधों के साथ काम करते समय चार लाइब्रेरी लोकप्रिय हैं: PycURL, Requests, HTTPX, और AIOHTTP। प्रत्येक के अपने फायदे और सीमाएँ हैं। यहाँ आपकी ज़रूरत के अनुसार सही टूल चुनने में मदद करने के लिए एक तुलना दी गई है:

फ़ीचर PycURL Requests HTTPX AIOHTTP
उपयोग में आसानी मध्यम बहुत आसान आसान मध्यम
प्रदर्शन उच्च मध्यम उच्च उच्च
असिंक्रोनस सपोर्ट नहीं नहीं हाँ हाँ
स्ट्रीमिंग हाँ सीमित हाँ हाँ
प्रोटोकॉल सपोर्ट व्यापक (कई प्रोटोकॉल सपोर्ट) HTTP/HTTPS HTTP/HTTPS, HTTP/2, WebSockets HTTP/HTTPS, WebSockets

उन्नत उपयोगकर्ता HTTP कमांड्स के साथ मिलने वाले कस्टम कंट्रोल्स की सराहना करेंगे; प्रदर्शन में PycURL उम्मीद से अधिक है। दूसरी ओर, Requests और HTTPX सरल और सहज परिस्थितियों के लिए बेहतर हैं। AIOHTTP असिंक्रोनस कार्यों को संभालने में खास है, और असिंक्रोनस अनुरोध प्रबंधन के लिए प्रभावी टूल प्रदान करता है।

जैसा कि आप देख सकते हैं, आपका चुनाव प्रोजेक्ट के दायरे के आधार पर बदल सकता है – लचीलापन बनाम गति। उन्नत संदर्भों में, PycURL पसंदीदा, और कभी-कभी एकमात्र विकल्प के रूप में उभरता है।

निष्कर्ष

अगर HTTP अनुरोध बनाते समय प्रदर्शन और लो-लेवल कंट्रोल आपकी प्राथमिकता है, तो PycURL एक ठोस विकल्प है। Python में cURL का उपयोग करना शुरुआती लोगों के लिए आसान नहीं हो सकता, लेकिन यह उन शक्तिशाली क्षमताओं को अनलॉक करता है जिन्हें अधिक एब्स्ट्रैक्ट लाइब्रेरीज़ अक्सर छुपाती हैं। वेब स्क्रैपिंग और XML हैंडलिंग से लेकर कस्टम हेडर्स और कुकीज़ मैनेज करने तक, PycURL यह सब सटीकता से करता है। हालाँकि, सरल कार्यों, असिंक्रोनस वर्कफ़्लोज़ या उपयोग में आसानी के लिए, Requests, HTTPX और AIOHTTP जैसी लाइब्रेरीज़ अधिक उपयुक्त हो सकती हैं।

लेख की सामग्री: