"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-12-22
Parcourir:428

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, la charge utile codée en URL est fournie à la fonction strings.NewReader, qui implémente io.Reader. La demande est ensuite correctement construite et envoyée.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3