帶有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 編碼的有效負載被提供給實作 io.Reader 的 strings.NewReader 函數。然後正確建置並發送請求。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3