2016年12月12日
这个简单的POST处理程序将在localhost:8080上运行时提取表单值。 [1]
但是,部署到AppSpot时,值为空字符串。将表单操作更改为' GET'在localhost:8080以及部署在AppSpot时都可以使用。
尝试了r.PostFormValue(" myValue")和r.FormValue(" myValue")但都返回"" r.Method返回" POST"
甚至尝试添加:enctype =" multipart / form-data"形成元素
感谢您对此进行调查,Robin
周六2016.12.10
cont:来自上面的GAEfan
尝试: r.ParseForm() myVal = r.Form [" myValue"]
虽然目前的形式Html确实验证了ttps://validator.w3.org/我确实花时间更正式,并添加了'类型'属性如建议。
› lein test :integration
lein test fixture.core-test
enabling expensive fixture...
doing expensive computation and acquiring resources...
first integration test
yay, expensive thing is done!
second integration test
Ran 2 tests containing 0 assertions.
0 failures, 0 errors.
问题似乎在回应中。 r.Body在AppSpot部署时始终是Nil。即使有一个"推迟r.Body.Close()"在表单值提取之前,AppSpot始终返回" http:无效读取封闭的Body"由于表单值是正文响应的一部分,这可以解释为什么值总是""
参考:ttp://www.w3schools.com/tags/ref_httpmethods.asp "请注意,查询字符串(名称/值对)在POST请求的HTTP消息正文中发送:"
<!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="my@email.com">
<input type="text" name="data" value="somedata">
<button>Send</button>
</form>
</body>
</html>
甚至尝试过:ttps://cloud.google.com/appengine/docs/go/getting-started/handling-user-input-in-forms但对于他们的一行表单处理内容太复杂了:r。 FormValue(&#34;内容&#34)
感谢您对属性的敏锐观察。 AppSpot的AppEngine显然处理与localhost不同的事情,我还没有找到合适的教程。
答案 0 :(得分:0)
尝试:
r.ParseForm()
myVal = r.Form["myValue"]
答案 1 :(得分:0)
周六2016.12.10
经过数小时的拔毛后发现了这种异常现象:
要确认表单是否正在发送内容,我已使用
检测到内容长度fmt.Fprintf(w, "<br>Request Content-Length [%v]", r.Header.Get("Content-Length"))
在延迟r.Body.Close()语句之前和之后,看到值随着我输入的表单数据的大小而变化。这个值与正文长度不同,所以我知道表单是在发送数据。这也做了什么 关闭r.Body流。删除该行代码可以解码正文内容。
对智者要谨慎。 。 。