Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que je reçois une erreur 301 Moved Permanently lors de l’utilisation de requêtes POST Multipart/Form-Data ?

Pourquoi est-ce que je reçois une erreur 301 Moved Permanently lors de l’utilisation de requêtes POST Multipart/Form-Data ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 22:19:29999parcourir

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

POST multipart/form-data

Lors de la tentative de POST de données à l'aide de multipart/form-data, des messages d'erreur comme celui fourni peuvent être rencontrés. Comprendre la question nécessite d’examiner la composition du problème. L'erreur rencontrée est une réponse 301 Moved Permanently, indiquant que la ressource a été redirigée définitivement. Cela se produit souvent lorsque l'en-tête Content-Type correct n'est pas défini pour les requêtes multipart/form-data.

Pour résoudre ce problème, assurez-vous que l'en-tête Content-Type est explicitement défini sur "multipart/form-data ; charset=UTF-8" lors de la requête POST. Cet en-tête informe le serveur que la requête inclut à la fois des données textuelles et binaires formatées selon le protocole multipart/form-data.

Vous trouverez ci-dessous un code Go corrigé qui définit avec succès l'en-tête Content-Type correct :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn