मल्टीपार्ट/फॉर्म-डेटा पोस्ट
मल्टीपार्ट/फॉर्म-डेटा का उपयोग करके डेटा पोस्ट करने का प्रयास करते समय, प्रदान किए गए त्रुटि संदेश हो सकते हैं सामना करना पड़ा मुद्दे को समझने के लिए समस्या की संरचना की जांच करना आवश्यक है। सामने आई त्रुटि 301 मूव्ड परमानेंटली प्रतिक्रिया है, जो दर्शाती है कि संसाधन को स्थायी रूप से पुनर्निर्देशित किया गया है। यह अक्सर तब होता है जब मल्टीपार्ट/फॉर्म-डेटा अनुरोधों के लिए सही कंटेंट-टाइप हेडर सेट नहीं किया जाता है।
इस समस्या को हल करने के लिए, सुनिश्चित करें कि कंटेंट-टाइप हेडर स्पष्ट रूप से "मल्टीपार्ट/फॉर्म-डेटा" पर सेट है; charset=UTF-8" POST अनुरोध करते समय। यह हेडर सर्वर को सूचित करता है कि अनुरोध में मल्टीपार्ट/फॉर्म-डेटा प्रोटोकॉल के अनुसार स्वरूपित टेक्स्ट-आधारित और बाइनरी डेटा दोनों शामिल हैं।
नीचे एक सही गो कोड है जो सही सामग्री-प्रकार हेडर को सफलतापूर्वक सेट करता है:
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