Stellen Sie eine URL-codierte POST-Anfrage mit http.NewRequest(...)
In diesem Zusammenhang beabsichtigen Sie, einen POST zu senden Anfrage über eine vordefinierte API mit einer Nutzlast, die als application/x-www-form-urlencoded-Inhalt formatiert ist. Anstatt sich auf Methoden wie Request.ParseForm zu verlassen, wollen wir uns eingehender mit dem bevorzugten Ansatz mithilfe von http.NewRequest(...) befassen.
Um Anforderungsheader effizient zu verwalten, haben Sie sich für http.NewRequest(method, urlStr string) entschieden , body io.Reader), um Ihre Anfrage zu erstellen. Obwohl diese Strategie im Allgemeinen sinnvoll ist, liegt der entscheidende Punkt im Umgang mit der Nutzlast. Gemäß der HTTP-Spezifikation sollten URL-codierte Nutzdaten über den Body-Parameter bereitgestellt und nicht direkt an die URL angehängt werden.
Um dieses Problem zu beheben, sollten Sie daher Ihren Code so ändern, dass er Ihre URL-codierten Nutzdaten enthält im Körperbereich. Hier ist ein Beispiel:
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) }
Mit dieser Änderung sollte Ihr Code nun korrekt eine URL-codierte Nutzlast im Textkörper senden, wie von der API gefordert. Folglich sollten Sie mit einer erfolgreichen Antwort rechnen, was durch einen resp.Status von 200 OK angezeigt wird.
Das obige ist der detaillierte Inhalt vonWie sende ich eine URL-codierte POST-Anfrage ordnungsgemäß mit http.NewRequest()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!