帶有URL 編碼負載的POST 請求
使用URL 編碼資料建構POST 請求時,經常會遇到400 BAD REQUEST 回應,表明伺服器無法理解負載。當有效負載提供不正確時,通常會出現此問題。
標準函式庫的 http.NewRequest(...) 方法期望將有效負載作為第三個參數提供,該參數應實作 io.Reader 介面。對於 URL 編碼的有效負載,這意味著它應該是一串編碼的鍵值對。
範例程式碼:
正確傳送URL 編碼使用http.NewRequest(...) 將資料作為POST 請求,請考慮以下範例:
package main import ( "fmt" "io/ioutil" "net/http" "net/url" "strings" ) func main() { apiUrl := "https://api.com" resource := "/user/" data := url.Values{} data.Set("name", "foo") data.Add("surname", "bar") u, _ := url.ParseRequestURI(apiUrl + resource) client := &http.Client{} r, _ := http.NewRequest(http.MethodPost, u.String(), strings.NewReader(data.Encode())) 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) bodyBytes, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(bodyBytes)) }
在此範例中, URL 編碼的有效負載提供給strings.NewReader 函數,該函數實現io.Reader。然後正確建置並發送請求。
以上是為什麼我在發送 URL 編碼的 POST 請求時收到 400 BAD REQUEST?的詳細內容。更多資訊請關注PHP中文網其他相關文章!