golang 在使用 multipart/form-data 时挂起
golang hangs when using multipart/form-data
我想向电报发送一个空的 post 请求。
问题是如果我关闭 multipart 一次,它就会永远挂起:
func main() {
var requestBody bytes.Buffer
multiPartWriter := multipart.NewWriter(&requestBody)
multiPartWriter.Close() // closing once
req, _ := http.NewRequest("POST", "https://api.telegram.org/bot<telegram token>/getme", &requestBody)
req.Header.Set("Content-Type", multiPartWriter.FormDataContentType())
client := &http.Client{}
client.Do(req)
}
但是,如果我关闭 multipart 两次,它就会起作用。
谁能解释为什么会这样?
我刚刚查看了 Telegram API。
我想一般的问题是,您使用了未初始化的缓冲区。
您不需要缓冲区,请求中不需要任何有效负载。您可以将 nil 作为请求数据传递。像这样:
func main() {
req, err := http.NewRequest("POST", "https://api.telegram.org/bot<token>/getme", nil)
if err != nil {
panic(err)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
result, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
println(string(result))
}
我还建议您查看文档 here 此文档可让您交互式试用 API,它还可以为每个请求生成代码。
为了生成Go代码示例,您可以点击右上角的按钮并选择您的Go。
我想向电报发送一个空的 post 请求。 问题是如果我关闭 multipart 一次,它就会永远挂起:
func main() {
var requestBody bytes.Buffer
multiPartWriter := multipart.NewWriter(&requestBody)
multiPartWriter.Close() // closing once
req, _ := http.NewRequest("POST", "https://api.telegram.org/bot<telegram token>/getme", &requestBody)
req.Header.Set("Content-Type", multiPartWriter.FormDataContentType())
client := &http.Client{}
client.Do(req)
}
但是,如果我关闭 multipart 两次,它就会起作用。 谁能解释为什么会这样?
我刚刚查看了 Telegram API。
我想一般的问题是,您使用了未初始化的缓冲区。 您不需要缓冲区,请求中不需要任何有效负载。您可以将 nil 作为请求数据传递。像这样:
func main() {
req, err := http.NewRequest("POST", "https://api.telegram.org/bot<token>/getme", nil)
if err != nil {
panic(err)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
result, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
println(string(result))
}
我还建议您查看文档 here 此文档可让您交互式试用 API,它还可以为每个请求生成代码。
为了生成Go代码示例,您可以点击右上角的按钮并选择您的Go。