Я хочу зробити запит POST до API, який надсилає мої дані як application/x-www-form-urlencodedтип вмісту. Через те, що мені потрібно керувати заголовками запитів, я використовую http.NewRequest(method, urlStr string, body io.Reader)метод для створення запиту. Для цього запиту POST я додаю свій запит даних до URL-адреси і залишаю тіло порожнім, приблизно так:
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)
}
Відповідаючи, я завжди отримую a 400 BAD REQUEST. Я вважаю, що проблема покладається на мій запит, і API не розуміє, який корисний набір я публікую. Мені відомі такі методи, як Request.ParseForm, але я не дуже впевнений, як використовувати їх у цьому контексті. Можливо, мені не вистачає якогось подальшого заголовка, можливо, є кращий спосіб надіслати корисне навантаження як application/jsonтип за допомогою bodyпараметра?