【发布时间】:2022-01-20 22:12:35
【问题描述】:
我需要生成这种形式的多部分发布请求:
POST /blabla HTTP/1.1
Host: 2.2.2.2
Authorization: moreblabla Content-Type: multipart/mixed; boundary=--rs0q5Jq0M2Yt08jU534d1q Content-Length: 347
Node: 1.1.1.1.1
--rs0q5Jq0M2Yt08jU534d1q Content-Type: application/json
{"hello" : "world"}
--rs0q5Jq0M2Yt08jU534d1q
(如果您知道如何使用 Curl 生成上述内容,请也给我一个提示;)) 我尝试了以下方法:
var jsonStr = []byte(`{"hello" : "world"}`)
func main() {
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
part, _:= writer.CreateFormField("")
part.Write(jsonStr)
writer.Close()
req, _ := http.NewRequest("POST", "blabla", body)
req.Header.Set("Content-Type", writer.FormDataContentType())
...
}
但是服务器无法读取正文的内容。它以 200 HTTP 请求响应,但表示不支持该消息类型。
那么如何生成上述形式的多部分/混合请求?
提前感谢您的帮助。
【问题讨论】:
-
您想要生成 multipart/mixed 但调用 writer.FormDataContentType() 来创建 multipart/form-data:使用 writer.Boundary 自己组装 Content-Type 标头。您的部分不是表单字段,因此您不能使用便利功能 writer.CreateFormFields 但您应该使用 writer.CreatePart 它可以让您将适当的 Content-Type 设置为 application/json。