Golang:如何使用表单请求模拟POST?

时间:2015-07-31 22:48:07

标签: go server

我一直在网上搜索,并且在golang测试中发布表单方面找不到多少。这是我的尝试。我收到错误"拨tcp:地址:: 1"中的冒号太多虽然。如果我将地址更改为" http://localhost:8080/"我得到"拨打tcp 127.0.0.1:8080:连接被拒绝"。

我已经读过,如果你把(IPv6)地址放在括号中,括号将解决问题,但后来我得到错误无法识别的协议。

var addr = "http://::1/"
h := handlers.GetHandler()
server := httptest.NewServer(h)
server.URL = addr
req, err := http.PostForm(addr+"login",
        url.Values{"username": {"lemonparty"}, "password": {"bluewaffle"}})
if err != nil {
    log.Fatal(err)
}

1 个答案:

答案 0 :(得分:4)

tl; Listener中的httptest.Server不会使用httptest.Server.URL作为要监听的网址。它并不关心这个价值是什么。它侦听本地主机最低开放端口号。

httptest.Server上的网址属性并没有真正做任何事情。改变你想要的一切,只是不要在那里发送你的请求。查看此示例程序https://play.golang.org/p/BsH38WLkrJ

基本上,如果我更改服务器URL然后将请求发送到我设置它的值不起作用,但是如果我将它发送到它的默认值。

同时查看源http://golang.org/src/net/http/httptest/server.go?s=415:1018#L65以及文件底部的证书;显然硬编码为本地主机上的最低开放端口。如果您想要Listener

向另一个网址发出请求