Maison > développement back-end > Golang > 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
Libérer: 2024-10-26 22:19:29
original
1176 Les gens l'ont consulté

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal