Maison >développement back-end >Golang >Comment envoyer correctement une requête POST codée en URL à l'aide de http.NewRequest() ?

Comment envoyer correctement une requête POST codée en URL à l'aide de http.NewRequest() ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-24 11:35:17706parcourir

How to Properly Send a URL-Encoded POST Request using 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!

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