Buat Permintaan POST berkod URL dengan http.NewRequest(...)
Dalam konteks ini, anda berhasrat untuk menghantar POST permintaan melalui API yang dipratentukan dengan muatan yang diformatkan sebagai kandungan aplikasi/x-www-form-urlencoded. Daripada bergantung pada kaedah seperti Request.ParseForm, mari kita mendalami pendekatan pilihan menggunakan http.NewRequest(...).
Untuk mengurus pengepala permintaan dengan cekap, anda memilih http.NewRequest(method, urlStr string , body io.Reader) untuk membuat permintaan anda. Walaupun strategi ini secara amnya baik, pengawasan utama terletak pada pengendalian muatan. Mengikut spesifikasi HTTP, muatan berkod URL hendaklah disediakan melalui parameter badan, tidak dilampirkan terus pada URL.
Oleh itu, untuk membetulkan isu ini, anda harus mengubah suai kod anda untuk memasukkan muatan berkod URL anda di bahagian badan. Berikut ialah contoh:
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) }
Dengan pengubahsuaian ini, kod anda kini sepatutnya menghantar muatan berkod URL dengan betul dalam badan seperti yang diperlukan oleh API. Oleh itu, anda harus mengharapkan respons yang berjaya, seperti yang ditunjukkan oleh respons.Status 200 OK.
Atas ialah kandungan terperinci Bagaimana untuk Menghantar Permintaan POST Berkod URL dengan Betul menggunakan http.NewRequest()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!