小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《使用 Golang 发布 HTML 表单方法》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!
问题内容所以,我在 html 中有这个表单。它旨在向 /subscribe
页面发出 post 请求:
<html>
<form action="/subscribe" method="post">
first name: <input type="text" name="first_name" placeholder="willy"/><br/>
last name: <input type="text" name="last_name" placeholder="warmwood"/><br/>
email: <input type="email" name="email" placeholder="[email protected]"/><br/>
<input type="submit" value="submit"/>
</form>
</html>
然后,我在 golang 中有这个路由器:
http.handlefunc("/subscribe/", subscribehandler)
以及 golang 中的这个处理程序:
func SubscribeHandler(w http.ResponseWriter, r *http.Request) {
log.Println(r.Method)
}
但问题是,它总是打印 get
。
如何发布表单,所以r.method
的值为post
?
谢谢
解决方案
根据文档:
如果子树已注册,并且收到命名子树根但不带尾部斜杠的请求,则 servemux 会将该请求重定向到子树根(添加尾部斜杠)。可以通过单独注册不带尾部斜杠的路径来覆盖此行为。
因为您注册了 "/subscribe/"
,带有尾部斜杠,所以它被注册为子树。再次,根据文档:
以斜杠结尾的模式命名为根子树
因为 http 重定向(实际上)始终是 get 请求,所以重定向后的方法当然是 get。您可以看到在此示例中发生了真正的重定向:https://play.golang.org/p/OcEhVDosTNf
解决方案是注册两者:
http.handlefunc("/subscribe/", subscribehandler)
http.handlefunc("/subscribe", subscribehandler)
或者将您的表单指向带有 /
的表单:
<form action="/subscribe/" method="post">
好了,本文到此结束,带大家了解了《使用 Golang 发布 HTML 表单方法》,希望本文对你有所帮助!关注编程网公众号,给大家分享更多Golang知识!