Maison >développement back-end >Golang >Pourquoi est-ce que je reçois un message 400 BAD REQUEST lors de l'envoi de requêtes POST codées en URL ?

Pourquoi est-ce que je reçois un message 400 BAD REQUEST lors de l'envoi de requêtes POST codées en URL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-21 22:19:19887parcourir

Why am I getting a 400 BAD REQUEST when sending URL-encoded POST requests?

Requête POST avec charge utile codée en URL

Lors de la construction d'une requête POST avec des données codées en URL, il est courant de rencontrer un 400 BAD Réponse REQUEST, indiquant que le serveur ne peut pas comprendre la charge utile. Ce problème survient généralement lorsque la charge utile est fournie de manière incorrecte.

La méthode http.NewRequest(...) de la bibliothèque standard s'attend à ce que la charge utile soit fournie comme troisième argument, qui doit implémenter l'interface io.Reader. Dans le cas d'une charge utile codée en URL, cela signifie qu'il doit s'agir d'une chaîne de paires clé-valeur codées.

Exemple de code :

Pour envoyer correctement une charge utile codée en URL données sous forme de requête POST utilisant http.NewRequest(...), considérons l'exemple suivant :

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "strings"
)

func main() {
    apiUrl := "https://api.com"
    resource := "/user/"
    data := url.Values{}
    data.Set("name", "foo")
    data.Add("surname", "bar")

    u, _ := url.ParseRequestURI(apiUrl + resource)
 
    client := &http.Client{}
    r, _ := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(data.Encode()))
    r.Header.Add("Authorization", "auth_token=\"XXXXXXX\"")
    r.Header.Add("Content-Type", "application/x-www-form-urlencoded")

    resp, _ := client.Do(r)
    fmt.Println(resp.Status)
    bodyBytes, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(bodyBytes))
}

Dans cet exemple, le La charge utile codée en URL est fournie à la fonction strings.NewReader, qui implémente io.Reader. La requête est alors correctement construite et envoyée.

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