إجراء طلبات HTTP
GET وPOST باستخدام http.NewRequest وhttp.DefaultClient
إجراء طلبات HTTP درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
الاختصار http.Get
يُعد http.Get(url) أبسط طريقة لإجراء طلب GET. احرص دائمًا على إغلاق نص الاستجابة الأساسي.
resp, err := http.Get("https://api.example.com/users")
if err != nil { return err }
defer resp.Body.Close()http.DefaultClient
يستخدم http.Get كائن DefaultClient على مستوى الحزمة. في الإنتاج، أنشئ عميلًا مخصصًا واضبط له المهلات الزمنية.
client := &http.Client{Timeout: 10 * time.Second}
resp, err := client.Get(url)http.NewRequest للتحكم الكامل
استخدم http.NewRequest لضبط الطريقة والترويسات والنص الأساسي:
req, err := http.NewRequestWithContext(ctx, "POST", url, body)
req.Header.Set("Content-Type", "application/json")
resp, err := client.Do(req)نص الطلب الأساسي
مرّر نص الطلب الأساسي عبر io.Reader. بالنسبة إلى حمولات JSON، استخدم bytes.NewBuffer(data) أو strings.NewReader.
data, _ := json.Marshal(payload)
req, _ := http.NewRequestWithContext(ctx, "POST", url, bytes.NewBuffer(data))التحقق من حالة الاستجابة
تحقق دائمًا من رمز حالة HTTP — فلا تُرجع حالة 4xx/5xx كخطأ في Go افتراضيًا.
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("unexpected status: %d", resp.StatusCode)
}فك ترميز استجابة JSON
فك ترميز نص الاستجابة الأساسي باستخدام json.Decoder لتجنب قراءته بالكامل في الذاكرة أولًا:
var result APIResponse
json.NewDecoder(resp.Body).Decode(&result)معلمات الاستعلام
أنشئ سلاسل الاستعلام باستخدام url.Values وألحقها بعنوان URL:
params := url.Values{}
params.Set("page", "1")
params.Set("limit", "20")
reqURL := baseURL + "?" + params.Encode()Client.Do والنقل المخصص
غلّف http.DefaultTransport لإضافة منطق إعادة المحاولة أو إعدادات TLS المخصصة أو إعدادات الوكيل، من دون فقدان السلوك الافتراضي.
يجب إغلاق نص الاستجابة الأساسي
يؤدي عدم إغلاق نص الاستجابة الأساسي إلى تسرّب اتصال TCP الأساسي. استخدم دائمًا defer resp.Body.Close() حتى مع استجابات الأخطاء.
اتباع عمليات إعادة التوجيه
يتبع العميل الافتراضي ما يصل إلى 10 عمليات إعادة توجيه. اضبط client.CheckRedirect لتخصيص اتباع عمليات إعادة التوجيه أو تعطيله.
ضبط User-Agent
اضبط ترويسة User-Agent وصفية حتى تتمكن سجلات الخادم من تحديد عميلك:
req.Header.Set("User-Agent", "myapp/1.0 (+https://myapp.com)")تحقق سريع
لماذا ينبغي إغلاق نص استجابة HTTP دائمًا؟
مراجعة: إجراء طلبات HTTP
النقاط الرئيسية:
- استخدم دائمًا defer resp.Body.Close()
- أنشئ http.Client مخصصًا مع Timeout في الإنتاج
- استخدم http.NewRequestWithContext للسياق والترويسات المخصصة
- تحقق من resp.StatusCode — أخطاء HTTP ليست أخطاء Go
الأسئلة الشائعة
هل درس «إجراء طلبات HTTP» مجاني؟
نعم — نص درس «إجراء طلبات HTTP» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «إجراء طلبات HTTP»؟
GET وPOST باستخدام http.NewRequest وhttp.DefaultClient تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «إجراء طلبات HTTP»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.