Reqwest لـ Rust: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو Reqwest ولماذا تحتاجه؟

\n\n

Reqwest هي واحدة من أشهر وأسهل المكتبات لتنفيذ طلبات HTTP بلغة Rust. توفر واجهة برمجة تطبيقات (API) عالية المستوى ومريحة، مبنية على محرك HTTP غير المتزامن hyper و tokio. إذا كنت تكتب في Rust أداة لاستخراج بيانات الويب، أو عميلاً لـ REST API، أو بوتاً لـ Telegram، أو ببساطة تريد تنزيل ملف - فإن Reqwest ستكون أداتك الأساسية.

\n\n

تدعم المكتبة كلاً من الطلبات غير المتزامنة (الافتراضية) والمتزامنة (الحاجبة)، والعمل مع JSON، و multipart/form-data، وملفات تعريف الارتباط (الكوكيز)، والبروكسي، و TLS/SSL، وإعادة التوجيه، وغيرها الكثير. تم تصميم Reqwest لتكون بديهية للمطورين الملمين بمكتبة Python requests أو مكتبة JavaScript fetch.

\n\n

الإمكانيات الرئيسية:

\n
    \n
  • طلبات HTTP/HTTPS غير متزامنة ومتزامنة (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS)
  • \n
  • تسلسل وإلغاء تسلسل JSON تلقائياً (عبر serde)
  • \n
  • دعم multipart/form-data لرفع الملفات
  • \n
  • إدارة ملفات تعريف الارتباط (مخزن الكوكيز)
  • \n
  • دعم البروكسي (HTTP, HTTPS, SOCKS5)
  • \n
  • تخصيص المهلات الزمنية، والترويسات، و User-Agent
  • \n
  • العمل مع التدفقات (streaming) للردود الكبيرة
  • \n
  • الأمان الافتراضي (التحقق من شهادات SSL)
  • \n
\n\n

التثبيت

\n\n

لاستخدام Reqwest، ستحتاج إلى مشروع Rust مع ملف Cargo.toml. أضف التبعية في قسم [dependencies]:

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

شرح الميزات (features):

\n
    \n
  • json — يتضمن دعم تسلسل/إلغاء تسلسل JSON عبر serde.
  • \n
  • multipart — لإرسال multipart/form-data.
  • \n
  • cookies — للإدارة التلقائية لملفات تعريف الارتباط.
  • \n
  • socks — لدعم بروكسي SOCKS5.
  • \n
  • إذا كنت تحتاج فقط إلى عميل متزامن (حاجب)، أضف الميزة blocking.
  • \n
\n\n

للاستخدام المتزامن (بدون عدم تزامن) يمكنك التوصيل كالتالي:

\n\n
reqwest = { version = "0.12", features = ["blocking", "json"] }
\n\n

بداية سريعة مع مثال كود

\n\n

لنقم بطلب GET بسيط إلى API عام ونعرض النتيجة. أنشئ ملف main.rs:

\n\n
use reqwest;\nuse std::error::Error;\n\n#[tokio::main]\nasync fn main() -> Result<(), Box<dyn Error>> {\n    // تنفيذ طلب GET\n    let response = reqwest::get("https://api.github.com/repos/rust-lang/rust")\n        .await?;\n\n    // التحقق من الحالة\n    if response.status().is_success() {\n        // تحليل جسم الرد كـ JSON (بدون كتابة صارمة)\n        let body: serde_json::Value = response.json().await?;\n        println!("اسم المستودع: {}", body["full_name"]);\n        println!("الوصف: {}", body["description"].as_str().unwrap_or("لا يوجد وصف"));\n        println!("النجوم: {}", body["stargazers_count"]);\n    } else {\n        eprintln!("خطأ: {}", response.status());\n    }\n\n    Ok(())\n}
\n\n

قم بتشغيله باستخدام الأمر cargo run. يجب أن ترى معلومات حول مستودع Rust.

\n\n

الطرق والوظائف الأساسية

\n\n

1. reqwest::get()

\n

ما تفعله: تنفيذ طلب HTTP GET إلى عنوان URL المحدد. هذه هي أبسط طريقة للحصول على البيانات. تُرجع Response.

\n

المعلمات:

\n
    \n
  • url: impl IntoUrl — سلسلة نصية أو عنوان URL حيث يتم إرسال الطلب.
  • \n
\n

مثال:

\n
let resp = reqwest::get("https://httpbin.org/get"                    

توصيات