Пт 2016.12.09
Этот простой обработчик POST будет извлекать значения формы при работе на локальном хосте: 8080. [1]
Однако при развертывании в AppSpot значения представляют собой пустую строку. Изменение действия формы на «GET» работает как на локальном хосте: 8080, так и при развертывании в AppSpot.
Пробовал r.PostFormValue("myValue") и r.FormValue("myValue"), но оба возвращают "" r.Method возвращает "POST"
Даже пытался добавить: enctype="multipart/form-data" в элемент формы
Спасибо за внимание к этому, Робин.
Сб 2016.12.10
продолжение: из GAEfan выше
Попробуйте: r.ParseForm() myVal = r.Form["myValue"]
Хотя текущая форма Html действительно проверяет ttps://validator.w3.org/, я нашел время, чтобы быть более формальным, и добавил атрибут «тип», как было предложено.
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><title>Get Form POST Value</title></head>
<body>
<form method="POST" action="/post" enctype="multipart/form-data">
<input type="text" name="myValue" value="qwert">
<input type="text" name="email" value="[email protected]">
<input type="text" name="data" value="somedata">
<button>Send</button>
</form>
</body>
</html>
Проблема, кажется, в ответе. r.Body всегда имеет значение Nil при развертывании в AppSpot. Даже если " defer r.Body.Close () " предшествует извлечению значения формы, AppSpot всегда возвращает "http: недействительное чтение закрытого тела". Поскольку значения формы являются частью ответа тела, это объясняет, почему значения всегда ""
ref: ttp://www.w3schools.com/tags/ref_httpmethods.asp «Обратите внимание, что строка запроса (пары имя/значение) отправляется в теле сообщения HTTP запроса POST:»
func postHandler(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
fmt.Fprintf(w, "<br>r.FormValue(\"myValue\") [%s]", r.FormValue("myValue"))
// and the suggestion from earlier
r.ParseForm()
myVal := r.Form["myValue"]
fmt.Fprintf(w, "<br>myVal [%s]", myVal)
bod, err := ioutil.ReadAll(r.Body)
if err != nil {
fmt.Fprintf(w, "<br>ERROR: ioutil.ReadAll(r.Body): [%s]", err)
Даже пробовал: ttps://cloud.google.com/appengine/docs/go/getting-started/handling-user-input-in-forms, но это слишком сложно для обработки одной строки формы Content: r.FormValue(" содержание")
Спасибо за внимательное наблюдение за атрибутами. AppEngine в AppSpot, по-видимому, решает вопросы иначе, чем на локальном хосте, и мне еще предстоит найти подходящее руководство.
r
request
? Если да, то вам нужноr.POST.
... - person GAEfan   schedule 10.12.2016