gpt4 book ai didi

http - 从 ReadCloser 发送 HTTP Put 主体永远不会结束

转载 作者:数据小太阳 更新时间:2023-10-29 03:44:12 27 4
gpt4 key购买 nike

目标

我想将数据从阅读器发送到我的服务器。 (在示例中是 NopCloser,稍后它将是 exec.Command 的 Stdout)

问题

请求永远不会结束。即使我手动关闭 cmdOut,程序也永远不会结束。具体:它永远不会到达“请求完成”行,并且永远不会调用 wg.Done()

陷阱

所有数据都正确发送到服务器(即使使用 exec.Command Stdout)。但是 http.DefaultClient.Do 似乎仍在监听 ReadCloser 为空(并在主例程中关闭)

代码

cmdOut := ioutil.NopCloser(bytes.NewBuffer([]byte("Hallo DU")))

var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()

// localhost:1234 is a netcat server: "nc -l -p 1234"
req, _ := http.NewRequest("PUT", "http://localhost:1234", cmdOut)

resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Println(err)
return
}

// Never reaches this line
log.Println("Request Done")
}()

cmdOut.Close()

log.Println("Wait for go routine")
wg.Wait()
log.Println("DONE")

最佳答案

问题不在于您的请求的发送——而是响应的接收。

您正在向 netcat 发送您的请求,netcat 只会丢弃该请求,而不会执行任何其他操作。这使 HTTP 客户端库等待 HTTP 响应,但该响应永远不会到来。

解决方案是与实际的 HTTP 服务器通信。

关于http - 从 ReadCloser 发送 HTTP Put 主体永远不会结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55511118/

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