"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا أتلقى 400 طلب سيئ عند إرسال طلبات POST مشفرة بعنوان URL؟

لماذا أتلقى 400 طلب سيئ عند إرسال طلبات POST مشفرة بعنوان URL؟

تم النشر بتاريخ 2024-12-22
تصفح:324

Why am I getting a 400 BAD REQUEST when sending URL-encoded POST requests?

طلب POST مع حمولة مشفرة بعنوان URL

عند إنشاء طلب POST باستخدام بيانات مشفرة بعنوان URL، من الشائع مواجهة 400 BAD طلب استجابة، يشير إلى أن الخادم لا يمكنه فهم الحمولة. تنشأ هذه المشكلة عادةً عندما يتم تقديم الحمولة بشكل غير صحيح.

تتوقع طريقة http.NewRequest(...) الخاصة بالمكتبة القياسية تقديم الحمولة كوسيطة ثالثة، والتي يجب أن تنفذ واجهة io.Reader. في حالة الحمولة المرمزة بعنوان URL، فهذا يعني أنها يجب أن تكون سلسلة من أزواج المفتاح والقيمة المشفرة.

مثال للتعليمات البرمجية:

لإرسال عنوان URL مشفر بشكل صحيح البيانات كطلب POST باستخدام http.NewRequest(...)، خذ بعين الاعتبار المثال التالي:

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "strings"
)

func main() {
    apiUrl := "https://api.com"
    resource := "/user/"
    data := url.Values{}
    data.Set("name", "foo")
    data.Add("surname", "bar")

    u, _ := url.ParseRequestURI(apiUrl   resource)
 
    client := &http.Client{}
    r, _ := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(data.Encode()))
    r.Header.Add("Authorization", "auth_token=\"XXXXXXX\"")
    r.Header.Add("Content-Type", "application/x-www-form-urlencoded")

    resp, _ := client.Do(r)
    fmt.Println(resp.Status)
    bodyBytes, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(bodyBytes))
}

في هذا المثال، يتم توفير الحمولة المشفرة بعنوان URL إلى وظيفة strings.NewReader، التي تنفذ io.Reader. ثم يتم إنشاء الطلب وإرساله بشكل صحيح.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3