Этот простой обработчик POST будет извлекать значения формы при работе на локальном хосте: 8080. [1]
Однако при развертывании в AppSpot значения представляют собой пустую строку. Изменение действия формы на «GET» работает как на localhost: 8080, так и при развертывании в AppSpot.
Пробовал r.PostFormValue ("MyValue") и r.FormValue ("MyValue"), но и возвращение "" r.Method возвращает "POST"
Даже попытался добавить: ENCTYPE = "многочастному/form- данные», чтобы сформировать элемент
Спасибо за глядя на это, Робин
Сб 2016.12.10
продолжение: Из GAEfan выше
Try: r.ParseForm() myVal = r.Form [ "MyValue"]
Хотя в настоящее время формы Html делает проверки TTPS: //validator.w3.org/ Я потратил время, чтобы быть более формальным и добавил атрибут «type», как было предложено.
<!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. Даже если «exfer r.Body.Close()» предшествует извлечению значения формы, AppSpot всегда возвращает «http: invalid Read on closed Body». Поскольку значения формы являются частью ответа тела, это объясняет, почему значения всегда «"
исх: TTP: //www.w3schools.com/tags/ref_httpmethods.asp «Обратите внимание, что строка запроса (пар имя/значение) передается в теле HTTP-сообщение запроса на сообщение:»
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, но слишком сложным для своей одной строки обработки формы. Содержимое: r .FormValue ("content")
Благодарим вас за подробное наблюдение за атрибутами. AppEngine в AppSpot, по-видимому, обрабатывает вопросы иначе, чем на localhost, и мне еще предстоит найти подходящий учебник.
Дополнительный код необходим. И для формы, и для ее обработчика. Это 'r'' запрос'? Если это так, вам нужно 'r.POST.' ... – GAEfan