Rust के लिए HTTP-क्लाइंट: शीर्ष लाइब्रेरी और उपकरण

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

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

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

Rust के लिए HTTP-क्लाइंट: सर्वश्रेष्ठ लाइब्रेरी की समीक्षा



Rust एक सिस्टम प्रोग्रामिंग भाषा है जो वेब डेवलपमेंट और उच्च-लोड सेवाओं के निर्माण में लोकप्रियता प्राप्त कर रही है। किसी भी नेटवर्क एप्लिकेशन का एक मुख्य कार्य HTTP अनुरोध भेजना है। इस लेख में, हम Rust में HTTP के साथ काम करने के लिए सर्वश्रेष्ठ लाइब्रेरी, उनकी विशेषताओं, प्रदर्शन और उपयोग के उदाहरणों पर चर्चा करेंगे। यह सामग्री शुरुआती और अनुभवी डेवलपर्स दोनों के लिए उपयोगी होगी जो अपने प्रोजेक्ट के लिए एक उपकरण चुन रहे हैं।



1. reqwest — बहुमुखी विकल्प



reqwest Rust इकोसिस्टम में सबसे लोकप्रिय HTTP लाइब्रेरी है। यह hyper और tokio पर आधारित है, लेकिन एक उच्च-स्तरीय, एर्गोनोमिक API प्रदान करता है। यह एसिंक्रोनस (डिफ़ॉल्ट) और ब्लॉकिंग मोड (blocking फीचर के माध्यम से) दोनों का समर्थन करता है।



मुख्य क्षमताएँ:

  • एसिंक्रोनस और सिंक्रोनस अनुरोध
  • JSON की स्वचालित प्रोसेसिंग (serde के माध्यम से सीरियलाइज़ेशन/डीसीरियलाइज़ेशन)
  • TLS, cookies, प्रॉक्सी का समर्थन
  • रीडायरेक्शन और टाइम-आउट
  • फ़ाइल अपलोड और multipart/form-data


एसिंक्रोनस GET अनुरोध का उदाहरण:

use reqwest;use serde::Deserialize;

#[derive(Deserialize, Debug)]struct User { id: u32, name: String, email: String,}

#[tokio::main]async fn main() -> Result<(), reqwest::Error> { let user: User = reqwest::get("https://jsonplaceholder.typicode.com/users/1") .await? .json() .await?; println!("{:?}", user); Ok(())}


ब्लॉकिंग POST अनुरोध का उदाहरण:

use reqwest::blocking::Client;use serde_json::json;

fn main() -> Result<(), reqwest::Error> { let client = Client::new(); let resp = client.post("https://httpbin.org/post") .json(&json!({"key": "value"})) .send()?; println!("Status: {}", resp.status()); Ok(())}


लाभ: विशाल समुदाय, उत्कृष्ट दस्तावेज़ीकरण, लचीलापन। नुकसान: अपेक्षाकृत बड़ा बाइनरी आकार, tokio पर निर्भरता।



2. ureq — न्यूनतम सिंक्रोनस क्लाइंट



ureq एक हल्की, सरल लाइब्रेरी है जिसमें एसिंक्रोनसिटी नहीं है। यह स्क्रिप्ट, CLI-उपयोगिताओं और उन मामलों के लिए आदर्श है जहाँ tokio की आवश्यकता नहीं है। यह रनटाइम सेटअप के बिना 'बॉक्स से बाहर' काम करता है।



विशेषताएँ:

  • केवल सिंक्रोनस अनुरोध
  • न्यूनतम निर्भरताएँ
  • HTTPS, cookies, रीडायरेक्शन का समर्थन
  • अंतर्निहित JSON (json फीचर के माध्यम से)


उदाहरण:

use ureq;

fn main() -> Result<(), ureq::Error> { let body: String = ureq::get("https://api.github.com/repos/rust-lang/rust") .call()? .into_string()?; println!("{}", &body[..200]); Ok(())}


लाभ: सरलता, छोटा आकार, तेज़ संकलन समय। नुकसान: कोई एसिंक्रोनसिटी नहीं, जटिल परिदृश्यों के लिए सीमित क्षमताएँ।



3. hyper — निम्न-स्तरीय आधार



hyper Rust के लिए एक मौलिक HTTP लाइब्रेरी है, जिस पर reqwest और कई अन्य निर्मित हैं। यह प्रोटोकॉल पर पूर्ण नियंत्रण प्रदान करता है, लेकिन अधिक कोड और एसिंक्रोनसिटी की समझ की आवश्यकता होती है।



कब उपयोग करें: यदि आपको अधिकतम प्रदर्शन, गैर-मानक प्रोटोकॉल की आवश्यकता है, या आप अपना स्वयं का HTTP फ्रेमवर्क बना रहे हैं।



सरल क्लाइंट का उदाहरण:

use hyper::{Client, Uri};use hyper::body::HttpBody as _;use tokio;

#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { let client = Client::new(); let uri: Uri = "

अनुशंसाएँ