我想向 API 發(fā)出 POST 請(qǐng)求,將我的數(shù)據(jù)作為application/x-www-form-urlencoded內(nèi)容類(lèi)型發(fā)送。由于我需要管理請(qǐng)求標(biāo)頭,因此我使用該http.NewRequest(method, urlStr string, body io.Reader)方法來(lái)創(chuàng)建請(qǐng)求。對(duì)于這個(gè) POST 請(qǐng)求,我將我的數(shù)據(jù)查詢附加到 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)}當(dāng)我回應(yīng)時(shí),我總是得到一個(gè)400 BAD REQUEST. 我相信問(wèn)題取決于我的請(qǐng)求,并且 API 不了解我發(fā)布的有效負(fù)載。我知道像 那樣的方法Request.ParseForm,但不太確定如何在這種情況下使用它。也許我錯(cuò)過(guò)了一些進(jìn)一步的標(biāo)題,也許有更好的方法來(lái)application/json使用body參數(shù)將有效負(fù)載作為類(lèi)型發(fā)送?
使用 `http.NewRequest(...)` 發(fā)出 URL 編碼的 POST 請(qǐng)求
慕碼人8056858
2021-07-01 10:00:03