HTTP طريقة شائعة بشكل لا يصدق للتواصل مع الخوادم البعيدة. استخدم مكتبة Rust الممتازة هذه للمساعدة في تبسيط العملية.
مثل معظم لغات البرمجة ، يمكنك استخدام Rust لإرسال واستقبال البيانات عبر HTTP. عند إنشاء خدمة تستند إلى الويب ، ستحتاج غالبًا إلى دمج خدمة واحدة أو أكثر. ستفعل ذلك غالبًا عن طريق إرسال طلبات HTTP إليهم.
يحتوي Rust على وظائف مدمجة لعمليات HTTP. هناك أيضًا العديد من المكتبات في نظام Rust البيئي التي تساعدك على التفاعل مع HTTP وبناء خدمات HTTP.
عمل طلبات HTTP مع الصدأ
تتوفر العديد من مكتبات Rust لتقديم طلبات HTTP ، بما في ذلك ملف ريكويست, هايبر، و تصفح المكتبات. Reqwest هو الأكثر شعبية بين مطوري Rust.
Reqwest هي مكتبة عملاء عالية المستوى توفر واجهة برمجة تطبيقات بسيطة ومريحة لإجراء طلبات HTTP. Reqwest يوفر وظائف لإرسال الطلبات ومعالجة الردود والأخطاء. إنه يلخص العديد من التفاصيل وراء إجراء طلب HTTP ويدعم الميزات المتقدمة مثل الطلبات غير المتزامنة باستخدام طوكيو مدة العرض. كما أنه يتعامل مع إلغاء تسلسل JSON ورؤوس HTTP ومهلة الاتصال وإعدادات SSL.
ستجد مكتبة Reqwest في متناول يديك إذا كنت جديدًا على Rust أو تفتقر إلى الخبرة في خدمات HTTP.
لتبدأ بـ Reqwest ، أضف Reqwest و طوكيو مكتبات تبعيات مشروعك. Tokio هي مكتبة وقت تشغيل غير متزامنة تعمل مع Reqwest. يمكنك إضافة هذه التبعيات إلى ملف Cargo.toml ملف بعد إنشاء مشروع Rust.
[التبعيات]
طوكيو = {الإصدار = "1.15"، الميزات = ["ممتلىء"] }
ريكويست = {الإصدار = "0.11"، الميزات = ["json"] }
بمجرد إضافة مكتبات Reqwest و Tokio إلى تبعيات مشروعك ، ستقوم Cargo بتثبيتها عند إنشاء برنامجك.
طلبات HTTP GET مع Reqwest
ستقدم طلبات GET لاسترداد البيانات من خادم الويب. يمكن لطلبات GET استرداد صفحات HTML أو بيانات JSON أو الملفات الثنائية مثل الصور أو مقاطع الفيديو.
يتيح لك Reqwest تحديد نقطة نهاية عنوان URL كسلسلة مع معلمات ورؤوس الاستعلام الخاصة بالطلب.
إليك كيفية إرسال طلب HTTP GET إلى عنوان URL:
يستخدم reqwest:: خطأ.
غير متزامنالجبهة الوطنيةget_request() -> نتيجة {
يترك استجابة = reqwest:: get (" https://www.example.com").انتظر?;
println!("حالة: {}"، response.status ()) ؛يترك body = response.text ().انتظر?;
println!("النص الأساسي: \ n {}"، جسم)؛نعم(())
}
# [tokio:: main]
غير متزامنالجبهة الوطنيةرئيسي() -> نتيجة {
get_request ().انتظر?;
نعم(())
}
يحدد هذا الرمز وظيفة غير متزامنة ، get_request، لطباعة تفاصيل الاستجابة من طلب إلى example.com. يستدعي ال ريكويست وحدة يحصل طريقة وطباعة رمز حالة الاستجابة والجسم.
إليك نتيجة استدعاء get_request وظيفة من رئيسي وظيفة:
معالجة أخطاء HTTP مع Reqwest
ستحتاج إلى معالجة الأخطاء من طلبات HTTP عند ظهورها. توفر مكتبة Reqwest ملف خطأ اكتب التي يمكنك استخدامها لمعالجة الأخطاء. بالإضافة إلى ذلك ، يمكن أن توفر رموز حالة HTTP من خادم الويب معلومات حول حالة الطلب.
إليك كيفية التعامل مع أخطاء HTTP لطلباتك باستخدام Reqwest:
يستخدم reqwest:: خطأ.
غير متزامنالجبهة الوطنيةمعالجة_خطأ() -> نتيجة {
يترك استجابة = reqwest:: get (" https://www.example.com").انتظر?;مباراة response.status (). as_u16 () {
200..=299 => {
يترك body = response.text ().انتظر?;
println!("نجاح! نص: \ n {} "، جسم)؛
}
400..=599 => {
يترك الحالة = response.status () ؛
يترك error_message = response.text ().انتظر?;
println!("خطأ {}: {}"، status، error_message) ؛
}
_ => {
println!("رمز حالة غير متوقع: {}"، response.status ()) ؛
}
}نعم(())
}
# [tokio:: main]
غير متزامنالجبهة الوطنيةرئيسي() -> نتيجة {
مقبض_خطأ ().انتظر?;
نعم(())
}
ال معالجة_خطأ وظيفة تجعل طلب GET إلى example.com، وتعالج بيان المطابقة أي أخطاء بناءً على رمز حالة الاستجابة.
تقوم الوظيفة بطباعة رسالة ورمز الحالة بناءً على استجابة الخادم.
إرسال طلبات HTTP POST مع Reqwest
ستجري طلبات HTTP POST لإرسال البيانات إلى الخادم. يمكنك القيام بذلك باستخدام ملف reqwest:: العميل الهيكل الذي يقوم بإنشاء عميل واستخدام reqwest:: RequestBuilder هيكل لبناء الطلب.
إليك كيفية تقديم طلب POST لـ نقطة نهاية طلب HTTPbin's POST مع Reqwest:
يستخدم reqwest:: {Client، Error}؛
غير متزامنالجبهة الوطنيةاكتبه كملاحظة() -> نتيجة {
يترك url = " https://httpbin.org/post";
يترك json_data = r # "{" name ":" John Doe "،" email ":" [email protected] "}" #;يترك client = reqwest:: Client:: new () ؛
يترك الاستجابة = العميل
.post (عنوان url)
.header ("نوع المحتوى", "التطبيق / json")
.body (json_data.to_ Owned ())
.يرسل()
.انتظر?;println!("حالة: {}"، response.status ()) ؛
يترك response_body = response.text ().انتظر?;
println!("نص الاستجابة: \ n {}"، response_body)؛نعم(())
}
# [tokio:: main]
غير متزامنالجبهة الوطنيةرئيسي() -> نتيجة {
اكتبه كملاحظة().انتظر?;
نعم(())
}
ال json_data متغير يحدد بيانات JSON للطلب ، و عميل المتغير هو أ reqwest:: العميل على سبيل المثال لطلب POST.
ال إجابة المتغير هو منشئ طلب POST. ال بريد طريقة إرسال طلب POST إلى URL ، و رأس طريقة تعيين رأس HTTP. ال جسم طريقة تعيين نص الطلب ، و يرسل طريقة ترسل الطلب.
ال اكتبه كملاحظة تقوم الوظيفة بطباعة رمز حالة الاستجابة والجسم إلى وحدة التحكم باستخدام println! دقيق:
معالجة الرؤوس ومعلمات الاستعلام طلبات HTTP الخاصة بك
تعتبر معالجة الرؤوس ومعلمات الاستعلام جانبًا مهمًا في إجراء طلبات HTTP. تحتوي الرؤوس على معلومات إضافية مثل بيانات اعتماد المصادقة أو البيانات الوصفية حول المحتوى المطلوب.
ستستخدم معامِلات طلب البحث لإضافة معلومات إضافية إلى عنوان URL للخادم لتصفية الاستجابة أو تعديلها.
تتبع معالجة الرؤوس ومعلمات الاستعلام عملية مماثلة لإرسال طلبات النشر. إليك كيفية التعامل مع الرؤوس ومعلمات الاستعلام في طلبات HTTP باستخدام Reqwest:
يستخدم الأمراض المنقولة جنسيا:: المجموعات:: HashMap؛
يستخدم reqwest:: {Error، header}؛# [tokio:: main]
غير متزامنالجبهة الوطنيةرئيسي() -> نتيجة {
headers_for_requests ().انتظر?;
نعم(())
}غير متزامنالجبهة الوطنيةheaders_for_requests. رؤوس_للطلبات() -> نتيجة {
// إعداد عنوان URL والعناوين للطلب
يترك url = " https://example.com/api";
يتركموت headers = header:: HeaderMap:: new ()؛
headers.insert (header:: USER_AGENT، header:: HeaderValue:: from_static ("reqwest"));
headers.insert (رأس:: CONTENT_TYPE ، رأس:: HeaderValue:: from_static ("التطبيق / json"));// إعداد معلمات الاستعلام للطلب
يتركموت params = HashMap:: new () ؛
params.insert ("فو", "حاجِز");
params.insert ("باز", "كوكس");// تقديم الطلب
يترك استجابة = reqwest:: Client:: new ()
.get (url)
.headers (رؤوس)
.query (& params)
.يرسل()
.انتظر?;// التعامل مع الاستجابة
println!("{:#?}"، إجابة)؛
نعم(())
}
ستنشئ علامة تجزئة لمعلمات طلب البحث التي تمررها بعد ذلك إلى ملف استفسار طريقة. قم بإنشاء مثيل لـ رأس:: HeaderMap اكتب لإضافة رؤوس.
ال headers_for_requests. رؤوس_للطلبات ترسل الدالة طلب GET إلى example.com مع رؤوس متعددة ومعلمات طلب البحث. يستخدم رؤوس و استفسار الطرق التي تأخذ الخرائط التي تحتوي على الرؤوس ومعاملات الاستعلام ، على التوالي.
يمكنك إنشاء تطبيق ويب مكدس كامل في الصدأ باستخدام WASM
يعد إجراء طلبات HTTP مهارة مفيدة لبناء تطبيقات معقدة تدمج الوظائف من التطبيقات الأخرى.
يمكنك إنشاء تطبيقات ويب كاملة المكدس في Rust باستخدام مكتبات مثل Percy و Yew و Sycamore التي تجرد التعقيدات للحصول على تجربة تطوير ممتازة.