Go Webserver不处理POST请求

时间:2017-01-12 09:13:29

标签: http post go webserver

我正在使用Go的http包创建一个简单的Web服务器。我只注册了一个处理程序,用于请求路径" / requests /"。

它可以正常处理GET请求,但是当我发送POST请求时,永远不会调用处理程序,并且客户端会获得301 Moved Permanently响应。

我已经尝试过搜索这个但是看起来这并不是人们普遍面临的问题。

我的处理程序是:

func requestHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello")
}

主要功能:

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/requests/", requestHandler)
    http.ListenAndServe(":8000", mux)
}

Curl给出以下输出:

>> curl -i -X POST http://localhost:8000/requests
HTTP/1.1 301 Moved Permanently
Location: /requests/
Date: Thu, 12 Jan 2017 08:51:10 GMT
Content-Length: 0
Content-Type: text/plain; charset=utf-8

Go自己的http客户端返回一个类似的响应对象:

 &{301 Moved Permanently 301 HTTP/1.1 1 1 map[Content-Type:[text/plain; charset=utf-8] Location:[/requests/] Date:[Thu, 12 Jan 2017 08:51:58 GMT] Content-Length:[0]] 0x339190 0 [] false false map[] 0xc4200cc0f0 <nil>}

同样,GET请求的行为就像我期望它们并调用处理函数一样。我是否需要以不同的方式处理POST请求?感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您正在查询/requests/

重定向指向curl localhost:8000/requests

你像这样使用curl:

/requests

您需要在/requests/中使用mux.HandleFunc代替curl localhost:8000/requests/

或使用

requestHandler

另请注意,如果您请求可以在浏览器上运行而不进行任何更改,因为它会自动处理重定向。

如果mux.HandleFunc中的路由没有尾部斜杠,则带尾部斜杠的路径将返回404。

PS:您的POST处理所有方法,而不仅仅是r.Method个请求。您需要检查{{1}}以不同方式处理这些方法。