Skip to content

مكتبة http — عميل وخادم HTTP

مكتبة http توفر أدوات متكاملة للتعامل مع بروتوكول HTTP/HTTPS. تشمل عميل HTTP لإرسال الطلبات (GET, POST, PUT, DELETE)، وخادم HTTP لبناء واجهات برمجية (APIs)، ودعم WebSocket للاتصال في الوقت الحقيقي، مع دعم كامل لتشفير HTTPS.

sad
استورد http من "stdlib/http"

# إرسال طلب GET
متغير رد = انتظر http.احصل("https://api.example.com/data")
اطبع_سطر("الحالة: " + رد.الحالة)
اطبع_سطر("الجسم: " + رد.نص())

ملخص الدوال

عميل HTTP

الدالةالوصف
http.احصل(رابط، ترويسات؟)طلب GET
http.أرسل(رابط، جسم، ترويسات؟)طلب POST
http.حدّث(رابط، جسم، ترويسات؟)طلب PUT
http.احذف(رابط، ترويسات؟)طلب DELETE
http.طلب(خيارات)طلب مخصص

خادم HTTP

الدالةالوصف
http.خادم(منفذ)إنشاء خادم
خادم.على(مسار، معالج)تسجيل مسار
خادم.شغّل()تشغيل الخادم
خادم.أوقف()إيقاف الخادم

أدوات مساعدة

الدالةالوصف
http.ترميز_رابط(نص)ترميز URL
http.فك_ترميز_رابط(نص)فك ترميز URL

عميل HTTP

http.احصل(رابط، ترويسات؟) — طلب GET

تُرسل طلب HTTP GET إلى الرابط المحدد وتُرجع كائن الاستجابة. الطلب غير متزامن ويجب استخدام انتظر معه. يمكن تمرير خريطة ترويسات اختيارية. كائن الاستجابة يحتوي على الحالة (رمز الحالة HTTP)، الترويسات، والجسم.

sad
استورد http من "stdlib/http"

# جلب بيانات أوقات الصلاة من API
متغير رد = انتظر http.احصل("https://api.aladhan.com/v1/timingsByCity?city=Makkah&country=SA")

إذا (رد.الحالة == 200)
    اطبع_سطر("تم جلب أوقات الصلاة بنجاح")
    اطبع_سطر(رد.نص())
وإلا
    اطبع_سطر("خطأ: " + رد.الحالة)
نهاية

http.أرسل(رابط، جسم، ترويسات؟) — طلب POST

تُرسل طلب HTTP POST مع بيانات في جسم الطلب. مفيد لإرسال بيانات جديدة إلى الخادم مثل تسجيل مستخدم أو إضافة سجل.

sad
استورد http من "stdlib/http"
استورد json من "stdlib/json"

# تسجيل مستخدم جديد
متغير بيانات_المستخدم = {
    "الاسم": "عبدالرحمن الفقيه"،
    "البريد": "abdulrahman@example.com"،
    "المدينة": "جدة"
}

متغير رد = انتظر http.أرسل(
    "https://api.example.com/users"،
    json.نص(بيانات_المستخدم)،
    {"Content-Type": "application/json"}
)

إذا (رد.الحالة == 201)
    اطبع_سطر("تم التسجيل بنجاح!")
نهاية

http.حدّث(رابط، جسم، ترويسات؟) — طلب PUT

تُرسل طلب PUT لتحديث بيانات موجودة على الخادم.

sad
استورد http من "stdlib/http"
استورد json من "stdlib/json"

# تحديث بيانات طالب
متغير التحديث = {"المعدل": 3.92، "الحالة": "متفوق"}

متغير رد = انتظر http.حدّث(
    "https://api.example.com/students/1446023"،
    json.نص(التحديث)،
    {"Content-Type": "application/json"}
)
اطبع_سطر("حالة التحديث: " + رد.الحالة)

http.احذف(رابط، ترويسات؟) — طلب DELETE

تُرسل طلب DELETE لحذف مورد من الخادم.

sad
استورد http من "stdlib/http"

متغير رد = انتظر http.احذف("https://api.example.com/posts/42")
إذا (رد.الحالة == 200)
    اطبع_سطر("تم الحذف بنجاح")
نهاية

خادم HTTP

http.خادم(منفذ) — إنشاء خادم

تُنشئ خادم HTTP يستمع على المنفذ المحدد. بعد الإنشاء، استخدم على() لتسجيل المسارات ثم شغّل() لبدء الاستماع.

sad
استورد http من "stdlib/http"
استورد json من "stdlib/json"

# إنشاء API لأوقات الصلاة
متغير خادم = http.خادم(3000)

# الصفحة الرئيسية
خادم.على("/"، لامدا(طلب، رد)
    رد.أرسل("مرحباً بك في واجهة أوقات الصلاة")
نهاية)

# قائمة المدن
خادم.على("/مدن"، لامدا(طلب، رد)
    متغير المدن = ["مكة"، "المدينة"، "الرياض"، "جدة"، "الدمام"]
    رد.أرسل_json(المدن)
نهاية)

# أوقات صلاة مدينة محددة
خادم.على("/صلاة/:مدينة"، لامدا(طلب، رد)
    متغير المدينة = طلب.معامل("مدينة")
    متغير الأوقات = {
        "الفجر": "04:30"،
        "الظهر": "12:15"،
        "العصر": "15:30"،
        "المغرب": "18:45"،
        "العشاء": "20:15"
    }
    رد.أرسل_json({"المدينة": المدينة، "الأوقات": الأوقات})
نهاية)

اطبع_سطر("الخادم يعمل على المنفذ 3000")
خادم.شغّل()

أدوات مساعدة

http.ترميز_رابط(نص) / http.فك_ترميز_رابط(نص)

ترميز وفك ترميز النصوص لاستخدامها ضمن عناوين URL. مهم عند استخدام نصوص عربية في الروابط.

sad
استورد http من "stdlib/http"

متغير النص = "مكة المكرمة"
متغير المُرمَّز = http.ترميز_رابط(النص)
اطبع_سطر(المُرمَّز)    # مكة%20المكرمة

متغير الأصلي = http.فك_ترميز_رابط(المُرمَّز)
اطبع_سطر(الأصلي)       # مكة المكرمة

مثال شامل

sad
استورد http من "stdlib/http"
استورد json من "stdlib/json"

# تطبيق عملي: جلب بيانات من API وعرضها
غير_متزامن دالة رئيسية()
    اطبع_سطر("=== دليل المساجد ===")

    # جلب قائمة المساجد
    متغير رد = انتظر http.احصل("https://api.example.com/mosques?city=riyadh")

    إذا (رد.الحالة == 200)
        متغير المساجد = json.حلل(رد.نص())

        اطبع_سطر("عدد المساجد: " + حجم_مصفوفة(المساجد))
        اطبع_سطر("")

        لكل مسجد في المساجد
            اطبع_سطر("🕌 " + مسجد["الاسم"])
            اطبع_سطر("   الحي: " + مسجد["الحي"])
            اطبع_سطر("   السعة: " + لنص(مسجد["السعة"]))
            اطبع_سطر("")
        نهاية
    وإلا
        اطبع_سطر("خطأ في جلب البيانات: " + رد.الحالة)
    نهاية
نهاية

مُرخَّص بموجب رخصة MIT