multipart/related を POST したくて調べたときのメモ。
mime/multipart を使って NewWriter して (CreatePart して)+ Close すればOK🙆
package main
import (
"bytes"
"fmt"
"mime/multipart"
"net/textproto"
)
func main() {
body := new(bytes.Buffer)
mpWriter := multipart.NewWriter(body)
boundary := "END_OF_PART"
if err := mpWriter.SetBoundary(boundary); err != nil {
panic(err)
}
{
part := make(textproto.MIMEHeader)
part.Set("Content-Type", "text/plain")
writer, err := mpWriter.CreatePart(part)
if err != nil {
panic(err)
}
writer.Write([]byte("hello"))
}
{
part := make(textproto.MIMEHeader)
part.Set("Content-Type", "text/plain")
writer, err := mpWriter.CreatePart(part)
if err != nil {
panic(err)
}
writer.Write([]byte("hello2"))
}
mpWriter.Close()
fmt.Println(body)
}
OUTPUT
--END_OF_PART
Content-Type: text/plain
hello
--END_OF_PART
Content-Type: text/plain
hello2
--END_OF_PART--
- 複数の Part を書き込むには、
CreatePartを何度も呼び出せばよい - Part の中身は、
CreatePartから返ってくるio.Writerで書き込める - Boundary は指定しなければ生成してくれるみたい
-
Closeしないと最後の区切り--<Boundary>--が書き込まれないので注意🚨
Playground