我正在处理一个非常令人沮丧的端点,它要求我使用multipart/form-data
作为POST的Content-Type,即使该端点实际上只是希望表单的任何部分都使用基本的key:value文本。
不幸的是,我所看到的任何例子都是针对更复杂的类型-文件,图像,视频,等等。我在我的一端放进主体的是一个简单的map[string]interface{}
,其中interface{}
是简单的go类型- string,bool,int,float 64,等等。我如何将这个接口转换成NewRequest
func将接受的东西?谢谢!
bodyInput := map[string]interface{}{"client_id":"abc123", "you_ok": false, "jwt_token":"psojioajf.sjfiofijw.asdisaoetcetc"}
req, err := http.NewRequest(http.MethodPost, "https://my-website.com/endpoint/path", ???) // replace ???
if err != nil {
// handle error
}
req.Header.Set("Content-Type", "multipart/form-data")
client := http.Client{}
rsp, err := client.Do(req)
// deal with the rest
2条答案
按热度按时间eqqqjvef1#
在上面的代码中,我们首先创建一个新的url.Values对象data,然后循环bodyInputMap并将每一对添加到data,使用fmt. Sprint将值转换为字符串,最后使用bytes.NewBufferString创建一个新的缓冲区,其中包含编码后的表单数据。我们将其作为请求主体传递给http.NewRequest。Content-Type头根据端点的要求设置为“multipart/form-data”。
isr3a4wc2#
基于this answer的另一个问题,我能够弄清楚我需要什么。我必须使用
multipart
库,也正确地设置了头部的边界。