我有这段代码:
type myStruct struct {
ID string `json:"id"`
Nombre string `json:"nombre"`
Date time.Time `json:"date"`
}
func sendJson(data myStruct,url string) error {
jsonString, _:= json.Marshal(data)
pedir, _ := http.NewRequest("PATCH",url, bytes.NewBuffer(jsonString))
pedir.Header.Add("Content-Length", ?????)
.....
}
但是,我不知道如何获得长度;我一直在网上搜索没有找到解决方案,如果你想知道为什么我需要添加内容长度,如果大多数情况下不需要,我使用谷歌的一些apis说明显我需要添加此标题
答案 0 :(得分:3)
http.NewRequest(method, url string, body io.Reader) (*Request, error)
州的文件:
...
如果body的类型为* bytes.Buffer,* bytes.Reader或* strings.Reader,则返回的请求的ContentLength设置为其精确值(而不是-1),GetBody将被填充(因此307和308重定向可以重放body),如果ContentLength为0,则Body设置为NoBody。
您将*bytes.Buffer
传递给NewRequest
,然后您可以按以下方式设置内容长度:
pedir.Header.Add("Content-Length", strconv.FormatInt(pedir.ContentLength, 10))
注意强>:
正如@MichaelHampton指出的那样,您不需要明确设置Content-Length
。它将在需要时添加(通过lib)。 http.Request.Header
的文档也清楚地说明了这一点。