繁体   English   中英

如何在golang中将http请求发送到我自己的服务器

[英]how to send http request in golang to my own server

我在golang中编写了一个简单的网络服务器,该服务器获取/创建/编辑/删除一个简单的文本文件。 我已经编写了函数处理程序,我想通过将请求发送到适当的url并进行检查以查看会发生什么来对其进行测试。 我的代码如下:

func createHandler(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    name := vars["name"]
    body, _ := ioutil.ReadAll(r.Body)
    fmt.Fprint(w, name)
    ioutil.WriteFile(name, []byte(body), 0644)
}

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/textFiles/{name}", createHandler).Methods("POST")
    log.Fatal(http.ListenAndServe(":8080", r))

    var url = "http://localhost:8080/textFiles/testFile.txt"
    var text = []byte(`{"title":"this is an example."}`)
    req, err := http.NewRequest("POST", url, bytes.NewBuffer(text))
    if err != nil {
        panic(err)
    }

    client := &http.Client{}
    client.Do(req)
}

但是,一旦运行此代码,就不会创建新文件。 我一直在使用Google搜索,但是在这种类型的问题上我什么都找不到,我正在向正在同一文件中构建的服务器发送请求。 帮助表示赞赏。

客户端代码未执行。 调用http.ListenAndServe(":8080", r)运行服务器。 该函数仅在运行服务器时出错时返回。 如果函数确实返回,则log.Fatal将退出该过程。

一种解决方法是在goroutine中运行服务器。 这将允许主goroutine继续执行至客户端代码。

go func() {
    log.Fatal(http.ListenAndServe(":8080", r))
}()

这可能无法解决问题,因为无法保证服务器会在客户端发出请求之前运行。 通过在主函数中创建侦听套接字并在goroutine中运行服务器来解决此问题。

ln, err := net.Listen("tcp", ":8080")
if err != nil {
    log.Fatal(err)
}
go func() {
    log.Fatal(http.Serve(ln, r))
}()
... client code as before

如果目标是测试此代码,则使用httptest.Server 文档中的示例显示使用测试服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM