Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa saya mendapat Ralat 301 Moved Permanently apabila menggunakan permintaan POST Berbilang Bahagian/Data?

Mengapa saya mendapat Ralat 301 Moved Permanently apabila menggunakan permintaan POST Berbilang Bahagian/Data?

Susan Sarandon
Susan Sarandonasal
2024-10-26 22:19:29999semak imbas

Why am I getting a 301 Moved Permanently Error when using Multipart/Form-Data POST requests?

Siaran Berbilang Bahagian/Borang-Data

Apabila cuba MENYATAKAN data menggunakan berbilang bahagian/data-bentuk, mesej ralat seperti yang disediakan boleh dihadapi. Memahami isu tersebut memerlukan pemeriksaan komposisi masalah. Ralat yang dihadapi ialah respons 301 Moved Permanently, yang menunjukkan bahawa sumber telah diubah hala secara kekal. Ini selalunya berlaku apabila pengepala Jenis Kandungan yang betul tidak ditetapkan untuk permintaan berbilang bahagian/data bentuk.

Untuk menyelesaikan isu ini, pastikan pengepala Jenis Kandungan ditetapkan secara eksplisit kepada "data berbilang bahagian/bentuk; charset=UTF-8" semasa membuat permintaan POST. Pengepala ini memberitahu pelayan bahawa permintaan itu termasuk data berasaskan teks dan data binari yang diformatkan mengikut protokol data berbilang bahagian/bentuk.

Di bawah ialah kod Go yang diperbetulkan yang berjaya menetapkan pengepala Jenis Kandungan yang betul:

<code class="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
}</code>

Atas ialah kandungan terperinci Mengapa saya mendapat Ralat 301 Moved Permanently apabila menggunakan permintaan POST Berbilang Bahagian/Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn