معالجة طلبات HTTP في Lua
يمكنك الوصول إلى ترويسات الطلب ومتن الطلب والمعاملات وإنشاء الاستجابات باستخدام ngx API
معالجة طلبات HTTP في Lua درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
قراءة طريقة الطلب ومعرّف URI
يمكن الوصول إلى طريقة HTTP ومعرّف URI من مساحة أسماء ngx.
-- content_by_lua_block
local method = ngx.req.get_method()
local uri = ngx.var.uri
ngx.say("Method: " .. method .. ", URI: " .. uri)قراءة ترويسات الطلب
تعيد ngx.req.get_headers() جدولًا يحتوي على ترويسات الطلب.
local headers = ngx.req.get_headers()
local auth = headers["Authorization"]
if not auth then
ngx.status = 401
ngx.say("Unauthorized")
ngx.exit(ngx.HTTP_UNAUTHORIZED)
endقراءة معاملات الاستعلام
تعيد ngx.req.get_uri_args() جدولًا يحتوي على معاملات استعلام URL.
local args = ngx.req.get_uri_args()
local page = tonumber(args.page) or 1
local size = tonumber(args.size) or 20
ngx.say("Page: " .. page .. ", Size: " .. size)قراءة نص الطلب
اقرأ نص الطلب بعد استدعاء ngx.req.read_body() صراحةً.
ngx.req.read_body()
local body = ngx.req.get_body_data()
if not body then
ngx.status = 400
ngx.say("Empty body")
return
endتحليل نص JSON
استخدم مكتبة JSON، مثل cjson، لتحليل نص الطلب.
local cjson = require("cjson")
ngx.req.read_body()
local body = ngx.req.get_body_data()
local ok, data = pcall(cjson.decode, body)
if not ok then
ngx.status = 400
ngx.say("Invalid JSON")
return ngx.exit(400)
endضبط ترويسات الاستجابة
اضبط ترويسات الاستجابة عبر ngx.header قبل استدعاء ngx.say أو ngx.print.
ngx.header["Content-Type"] = "application/json"
ngx.header["X-Request-ID"] = ngx.var.request_idكتابة الاستجابة
تكتب ngx.say(s) سلسلة نصية متبوعة بسطر جديد. أما ngx.print(s) فتكتب السلسلة دون سطر جديد. وتنهي ngx.exit(code) الطلب باستخدام رمز حالة HTTP المحدد.
ngx.status
اضبط رمز حالة HTTP باستخدام ngx.status = 404 قبل كتابة نص الاستجابة.
ngx.status = 404
ngx.header["Content-Type"] = "application/json"
ngx.say(cjson.encode({error = "Not Found"}))إعادة التوجيه الداخلية
تنفّذ ngx.exec("/other/path") إعادة توجيه داخلية إلى كتلة موقع أخرى في Nginx دون إجراء رحلة HTTP إضافية.
الطلبات الفرعية
ينشئ ngx.location.capture("/api") طلبًا فرعيًا إلى موقع آخر، ويعيد جدولًا يحتوي على الحالة والترويسات والنص.
local res = ngx.location.capture("/internal/auth")
if res.status ~= 200 then
ngx.exit(403)
endمشاركة سياق الطلب
يمثل ngx.ctx جدولًا خاصًا بكل طلب لمشاركة البيانات بين معالجات المراحل المختلفة (access → content → log).
سؤال حول معالجة HTTP
ما الدالة التي تقرأ معاملات استعلام URL في OpenResty؟
مراجعة: معالجة طلبات HTTP
استخدم دوال ngx.req لقراءة الطريقة والترويسات ومعاملات الاستعلام والنص. واضبط ngx.header وngx.status قبل الكتابة. واستخدم ngx.say/ngx.print لإخراج البيانات. وشارك بيانات الطلب باستخدام ngx.ctx.
الأسئلة الشائعة
هل درس «معالجة طلبات HTTP في Lua» مجاني؟
نعم — نص درس «معالجة طلبات HTTP في Lua» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «معالجة طلبات HTTP في Lua»؟
يمكنك الوصول إلى ترويسات الطلب ومتن الطلب والمعاملات وإنشاء الاستجابات باستخدام ngx API تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «معالجة طلبات HTTP في Lua»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- بنية OpenResty
- معالجة طلبات HTTP في Lua
- Cosockets وTCP غير الحاجب
- قواميس الذاكرة المشتركة