使用http.NewRequest(...) 發出URL 編碼的POST 請求
在此上下文中,您打算發送一個POST透過預先定義的API 進行請求,其有效負載格式為application/x-www-form-urlencoded 內容。讓我們不依賴像 Request.ParseForm 這樣的方法,而是使用 http.NewRequest(...) 更深入地研究首選方法。
為了有效管理請求標頭,您選擇了 http.NewRequest(method, urlStr string 、 body io.Reader)來製作您的請求。雖然這種策略總體上是合理的,但關鍵的監督在於有效負載的處理。根據 HTTP 規範,URL 編碼的有效負載應透過 body 參數提供,而不是直接附加到 URL。
因此,要修正此問題,您應該修改程式碼以包含 URL 編碼的有效負載在正文部分。以下是一個範例:
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) }
透過此修改,您的程式碼現在應該按照 API 的要求在正文中正確傳送 URL 編碼的有效負載。因此,您應該預期成功的回應,如 resp.Status 200 OK 所示。
以上是如何使用 http.NewRequest() 正確傳送 URL 編碼的 POST 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!