我想向 API 發出 POST 請求,將我的數據作為application/x-www-form-urlencoded內容類型發送。由于我需要管理請求標頭,因此我使用該http.NewRequest(method, urlStr string, body io.Reader)方法來創建請求。對于這個 POST 請求,我將我的數據查詢附加到 URL 并將正文留空,如下所示:package mainimport ( "bytes" "fmt" "net/http" "net/url" "strconv")func main() { apiUrl := "https://api.com" resource := "/user/" data := url.Values{} data.Set("name", "foo") data.Add("surname", "bar") u, _ := url.ParseRequestURI(apiUrl) u.Path = resource u.RawQuery = data.Encode() urlStr := fmt.Sprintf("%v", u) // "https://api.com/user/?name=foo&surname=bar" client := &http.Client{} r, _ := http.NewRequest("POST", urlStr, nil) r.Header.Add("Authorization", "auth_token=\"XXXXXXX\"") r.Header.Add("Content-Type", "application/x-www-form-urlencoded") r.Header.Add("Content-Length", strconv.Itoa(len(data.Encode()))) resp, _ := client.Do(r) fmt.Println(resp.Status)}當我回應時,我總是得到一個400 BAD REQUEST. 我相信問題取決于我的請求,并且 API 不了解我發布的有效負載。我知道像 那樣的方法Request.ParseForm,但不太確定如何在這種情況下使用它。也許我錯過了一些進一步的標題,也許有更好的方法來application/json使用body參數將有效負載作為類型發送?
使用 `http.NewRequest(...)` 發出 URL 編碼的 POST 請求
慕碼人8056858
2021-07-01 10:00:03