Maison >développement back-end >Golang >Comment envoyer correctement une requête POST codée en URL à l'aide de http.NewRequest() ?
Faire une requête POST encodée en URL avec http.NewRequest(...)
Dans ce contexte, vous comptez envoyer un POST demande via une API prédéfinie avec une charge utile formatée en tant que contenu application/x-www-form-urlencoded. Au lieu de nous appuyer sur des méthodes comme Request.ParseForm, approfondissons l'approche préférée en utilisant http.NewRequest(...).
Pour gérer efficacement les en-têtes de requête, vous avez opté pour http.NewRequest(method, urlStr string , body io.Reader) pour rédiger votre demande. Bien que cette stratégie soit généralement judicieuse, la principale surveillance réside dans la gestion de la charge utile. Selon la spécification HTTP, les charges utiles codées en URL doivent être fournies via le paramètre body, et non directement ajoutées à l'URL.
Par conséquent, pour résoudre ce problème, vous devez modifier votre code pour inclure votre charge utile encodée en URL. dans la partie corps. Voici un exemple :
package main import ( "fmt" "net/http" "net/url" "strings" ) func main() { apiUrl := "https://api.com" resource := "/user/" data := url.Values{} data.Set("name", "foo") data.Set("surname", "bar") u, _ := url.ParseRequestURI(apiUrl) u.Path = resource urlStr := u.String() // "https://api.com/user/" client := &http.Client{} r, _ := http.NewRequest(http.MethodPost, urlStr, strings.NewReader(data.Encode())) // URL-encoded payload 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) }
Avec cette modification, votre code devrait désormais envoyer correctement une charge utile codée en URL dans le corps, comme l'exige l'API. Par conséquent, vous devez vous attendre à une réponse réussie, comme indiqué par un resp.Status de 200 OK.
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!