Третий аргумент http.NewRequest
- это полезная нагрузка http.
В вашем случае тип полезной нагрузки application/json
. Это нужно рассматривать как json, только тогда вы сможете получить определенную ценность от него. В этом случае мы просто не можем использовать тот же метод, что и при получении значения из строки запроса или данных формы.
Так что просто распакуйте данные jsonStr
в карту или структуру.
res := make(map[string]interface{})
err := json.Unmarshal(jsonStr, &res)
if err != nil {
panic(err)
}
fmt.Printf("%#v \n", res["title"])
Если честно, я совершенно запутался в вашем вопросе, почему вам нужно получить полезную нагрузку из http-запроса клиента.
Если на самом деле вы хотите получить полезную нагрузку от конца веб-сервера, вы можете получить ее, расшифровав тело запроса. Пример:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
payload := make(map[string]interface{})
err := json.NewDecoder(r.Body).Decode(&payload)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
title := payload["title"].(string)
w.Write([]byte(title))
})
Пример скручивания (на основе вашего кода):
curl -d '{"title":"Buy cheese and bread for breakfast."}' \
-H "Content-Type: application/json" \
-X POST http://localhost:9000
Выход:
Buy cheese and bread for breakfast.