Rust में HTTP क्लाइंट: सही तरीके से रिक्वेस्ट करना सीखें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: HTTP रिक्वेस्ट के लिए Rust क्यों बेहतरीन है?

\n

Rust एक सिस्टम प्रोग्रामिंग भाषा है जो अपनी सुरक्षा, परफॉरमेंस और गार्बेज कलेक्टर की कमी के कारण लोकप्रिय हुई है। यदि आप कोई नेटवर्क एप्लिकेशन, वेब स्क्रैपर या माइक्रोसर्विस बना रहे हैं, तो Rust में HTTP रिक्वेस्ट करना सीखना एक ज़रूरी स्किल है। इस आर्टिकल में हम reqwest लाइब्रेरी का उपयोग करके Rust में एक पूर्ण HTTP क्लाइंट बनाना सीखेंगे, जो Rust इकोसिस्टम में HTTP के लिए डी-फैक्टो स्टैंडर्ड है।

\n

हम डिपेंडेंसी इंस्टॉल करने से लेकर एरर हैंडलिंग और JSON के साथ काम करने तक का सफर तय करेंगे। इस लेख के अंत तक, आप Rust में भरोसेमंद और तेज़ HTTP क्लाइंट लिख पाएंगे जो प्रोडक्शन में भी काम आएंगे।

\n\n

प्रोजेक्ट सेटअप और इंस्टॉलेशन

\n

पहला कदम है एक नया प्रोजेक्ट बनाना और reqwest डिपेंडेंसी को async और JSON सपोर्ट के साथ जोड़ना।

\n
cargo new rust_http_client\ncd rust_http_client
\n

Cargo.toml खोलें और यह जोड़ें:

\n
[dependencies]\nreqwest = { version = "0.12", features = ["json"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1", features = ["derive"] }\nserde_json = "1"
\n

हर डिपेंडेंसी का काम:

\n
    \n
  • reqwest — मुख्य HTTP क्लाइंट। json फ्लैग सीरियलाइज़ेशन/डीसीरियलाइज़ेशन को सपोर्ट करता है।
  • \n
  • tokio — Rust का async रनटाइम। reqwest में HTTP रिक्वेस्ट डिफ़ॉल्ट रूप से async होते हैं।
  • \n
  • serde / serde_json — JSON के साथ काम करने के लिए (स्ट्रक्चर, सीरियलाइज़ेशन)।
  • \n
\n

अब कोड लिखने के लिए सब कुछ तैयार है।

\n\n

बेसिक GET रिक्वेस्ट: सर्वर से डेटा प्राप्त करें

\n

चलिए एक सरल GET रिक्वेस्ट से शुरू करते हैं। एक फंक्शन बनाएं जो पब्लिक API से डेटा लेकर कंसोल पर दिखाए।

\n
use reqwest::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Error> {\n    let url = "https://jsonplaceholder.typicode.com/posts/1";\n    let response = reqwest::get(url).await?;\n\n    println!("स्टेटस: {}", response.status());\n\n    let body = response.text().await?;\n    println!("रिस्पॉन्स बॉडी:\\n{}", body);\n\n    Ok(())\n}
\n

यहाँ क्या हो रहा है:

\n
    \n
  • हम async फंक्शन चलाने के लिए #[tokio::main] मैक्रो का उपयोग कर रहे हैं।
  • \n
  • reqwest::get(url).await? GET रिक्वेस्ट करता है। ? साइन एरर को आगे भेजता है अगर रिक्वेस्ट फेल हो जाए।
  • \n
  • response.status() HTTP स्टेटस लौटाता है (जैसे 200 OK)।
  • \n
  • response.text().await? रिस्पॉन्स बॉडी को स्ट्रिंग के रूप में निकालता है।
  • \n
\n

कोड को cargo run कमांड से चलाएं। आपको पोस्ट डेटा के साथ एक JSON ऑब्जेक्ट दिखाई देगा।

\n\n

हेडर और रिक्वेस्ट पैरामीटर जोड़ना

\n

असली एप्लिकेशन में अक्सर हेडर (जैसे API-की) या query-पैरामीटर भेजने की ज़रूरत होती है। यहाँ बताया गया है कैसे:

\n
use reqwest::Client;\nuse std::collections::HashMap;\n\n#[tokio::main]\nasync fn main() -> Result<(), reqwest::Error> {\n    let client = Client::new();\n\n    let mut params = HashMap::new();\n    params.insert("userId", "1");\n\n    let response = client\n        .get("https://jsonplaceholder.typicode.com/posts")\n        .header("Accept", "application/json")\n        .query(&params)\n        .send()\n        .await?;\n\n    let posts: serde_json::Value = response.json().await?;\n    println!("पोस्ट की संख्या: {}", posts.as_array().unwrap().len());\n\n    Ok(())\n}
\n

मुख्य बिंदु:

\n
    \n
  • हम Client बनाते हैं — यह एक रीयूज़ेबल HTTP क्लाइंट है जिसमें कनेक्शन पूल होता है। प्रोडक्शन कोड में हमेशा reqwest::get के बजाय Client का उपयोग करें।
  • \n
  • .header() मेथड हेडर जोड़ता है।
  • \n
  • .query() पैरामीटर का डिक्शनरी लेता है और URL को ऑटोमैटिकली एनकोड करता है।

ब्लॉग

पुस्तक अनुशंसाएँ