Saya ingin membuat permintaan POST ke API yang mengirimkan data saya sebagai application/x-www-form-urlencoded
tipe konten. Karena fakta bahwa saya perlu mengelola header permintaan, saya menggunakanhttp.NewRequest(method, urlStr string, body io.Reader)
metode untuk membuat permintaan. Untuk permintaan POST ini saya menambahkan kueri data saya ke URL dan membiarkan badan kosong, seperti ini:
package main
import (
"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)
}
Sebagai tanggapan saya, saya selalu mendapatkan 400 BAD REQUEST
. Saya yakin masalahnya bergantung pada permintaan saya dan API tidak memahami muatan mana yang saya posting. Saya mengetahui metode seperti Request.ParseForm
, tidak begitu yakin bagaimana menggunakannya dalam konteks ini. Mungkin saya kehilangan beberapa Header lebih lanjut, mungkin adakah cara yang lebih baik untuk mengirim payload sebagai application/json
tipe menggunakan body
parameter?