Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erhalte ich den Fehler „301 Moved Permanently“, wenn ich Multipart-/Form-Data-POST-Anfragen verwende?

Warum erhalte ich den Fehler „301 Moved Permanently“, wenn ich Multipart-/Form-Data-POST-Anfragen verwende?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 22:19:29999Durchsuche

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

Multipart-/Formulardaten-POSTs

Beim Versuch, Daten mithilfe von Multipart-/Formulardaten zu POSTEN, kann es zu Fehlermeldungen wie der bereitgestellten kommen angetroffen. Um das Problem zu verstehen, muss die Zusammensetzung des Problems untersucht werden. Bei dem aufgetretenen Fehler handelt es sich um die Antwort „301 Moved Permanently“, was darauf hinweist, dass die Ressource dauerhaft umgeleitet wurde. Dies tritt häufig auf, wenn der richtige Content-Type-Header für Multipart-/Formulardatenanforderungen nicht festgelegt ist.

Um dieses Problem zu beheben, stellen Sie sicher, dass der Content-Type-Header explizit auf „multipart/form-data; charset=UTF-8" bei der POST-Anfrage. Dieser Header informiert den Server darüber, dass die Anfrage sowohl textbasierte als auch binäre Daten enthält, die gemäß dem Multipart/Form-Data-Protokoll formatiert sind.

Unten finden Sie einen korrigierten Go-Code, der erfolgreich den richtigen Content-Type-Header festlegt:

<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>

Das obige ist der detaillierte Inhalt vonWarum erhalte ich den Fehler „301 Moved Permanently“, wenn ich Multipart-/Form-Data-POST-Anfragen verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn