" http.Post"期待一个"读者"作为身体的论点。 "文件"实现"读者"。 但是如果我将文件作为body参数传递,我总是在另一端收到0个字节。为什么?
以下是代码:
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
file, err := os.Open("lala.txt")
if err != nil {
fmt.Printf("file open errrrr %v \n", err)
}
defer file.Close()
resp, err := http.Post("http://requestb.in/11fta851", "text/plain", file)
if err != nil {
fmt.Printf("errrrr %v \n", err)
} else {
fmt.Printf("resp code %d \n", resp.StatusCode)
}
}
我知道你可以做" file.ReadAll"到缓冲区并使用它。但感觉就像是双重工作。
答案 0 :(得分:1)
如果未指定标头Content-Length
,则网站requestb.in似乎会忽略POST数据。此代码有效:
package main
import (
"fmt"
"net/http"
"os"
)
func main() {
file, err := os.Open("lala.txt")
if err != nil {
fmt.Printf("file open errrrr %v \n", err)
}
defer file.Close()
req, _ := http.NewRequest("POST", "http://requestb.in/1fry3jy1", file)
req.ContentLength = 5
resp, err := http.DefaultClient.Do(req)
if err != nil {
fmt.Printf("errrrr %v \n", err)
} else {
fmt.Printf("resp code %d \n", resp.StatusCode)
}
}