gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:28:23 27 4
gpt4 key购买 nike

我正在用 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)
}

但是,一旦运行此代码,就不会创建新文件。我一直在谷歌搜索,但我找不到任何关于此类问题的信息,我正在向我在同一个文件中构建的服务器发送请求。感谢帮助。

最佳答案

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

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

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

这可能无法解决问题,因为无法保证服务器会在客户端发出请求之前运行。通过在 main 函数中创建监听套接字并在 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 .文档中的示例展示了如何使用测试服务器。

关于http - 如何将golang中的http请求发送到我自己的服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54893097/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com