منشورات متعددة الأجزاء/بيانات النموذج
عند محاولة نشر البيانات باستخدام بيانات متعددة الأجزاء/النموذج، يمكن أن تظهر رسائل خطأ مثل تلك المقدمة مواجهة. إن فهم المشكلة يتطلب فحص تركيبتها. الخطأ الذي تمت مواجهته هو استجابة 301 تم النقل بشكل دائم، مما يشير إلى أنه تمت إعادة توجيه المورد بشكل دائم. يحدث هذا غالبًا عندما لا يتم تعيين رأس نوع المحتوى الصحيح لطلبات بيانات النموذج/متعددة الأجزاء.
لحل هذه المشكلة، تأكد من تعيين رأس نوع المحتوى بشكل صريح على "بيانات متعددة الأجزاء/النموذج؛ مجموعة الأحرف=UTF-8" عند تقديم طلب POST. يُعلم هذا الرأس الخادم أن الطلب يتضمن كلاً من البيانات النصية والبيانات الثنائية المنسقة وفقًا لبروتوكول بيانات النموذج/متعدد الأجزاء.
يوجد أدناه رمز Go المصحح الذي نجح في تعيين رأس نوع المحتوى الصحيح:
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"mime/multipart"
"net/http"
)
func NewPostWithMultipartFormData(url string, paramTexts map[string]string, paramFiles []FileItem) ([]byte, error) {
// Initialize a buffer to write the multipart form data.
buf := new(bytes.Buffer)
// Create a new multipart writer.
w := multipart.NewWriter(buf)
// Add text parameters to the multipart form.
for key, value := range paramTexts {
field, err := w.CreateFormField(key)
if err != nil {
return nil, fmt.Errorf("error creating form field '%s': %v", key, err)
}
if _, err := field.Write([]byte(value)); err != nil {
return nil, fmt.Errorf("error writing value to form field '%s': %v", key, err)
}
}
// Add binary parameters to the multipart form.
for _, file := range paramFiles {
fileWriter, err := w.CreateFormFile(file.Key, file.FileName)
if err != nil {
return nil, fmt.Errorf("error creating form file '%s': %v", file.Key, err)
}
if _, err := fileWriter.Write(file.Content); err != nil {
return nil, fmt.Errorf("error writing content to form file '%s': %v", file.Key, err)
}
}
// Close the multipart writer.
if err := w.Close(); err != nil {
return nil, fmt.Errorf("error closing multipart writer: %v", err)
}
contentType := w.FormDataContentType()
// Create a new POST request with the correct Content-Type header.
req, err := http.NewRequest(http.MethodPost, url, buf)
if err != nil {
return nil, fmt.Errorf("error creating HTTP request: %v", err)
}
req.Header.Set("Content-Type", contentType)
// Perform the HTTP request.
client := http.Client{}
resp, err := client.Do(req)
if err != nil {
return nil, fmt.Errorf("error sending HTTP request: %v", err)
}
defer resp.Body.Close()
// Read the response body.
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("error reading HTTP response body: %v", err)
}
return body, nil
}
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3