我正在着火并忘记接受 http POST 请求并从请求主体收集所需数据的微服务,然后请求主体中的给定 URL。
我遇到的问题是输入数据中的标头数量是动态的,这意味着可以有 1 个或多个标头。它不同。
因此,我将传入的 requestBody 解组为以下结构:
type Request struct {
Headers json.RawMessage `json:"headers"`
Method string `json:"method"`
Body json.RawMessage `json:"body"`
}
type Event struct {
Url string `json:"url"`
Request Request `json:"request"`
}
和:
var newEvent Event
reqBody, err := ioutil.ReadAll(r.Body)
if err != nil {
fmt.Fprintln(w, err)
}
err2 := json.Unmarshal(reqBody, &newEvent)
if err2 != nil {
fmt.Fprintln(w, err2)
}
创建请求时,正文很容易传递:
req, err := http.NewRequest(newEvent.Request.Method , newEvent.Url, bytes.NewBuffer(newEvent.Request.Body))
if err != nil {
panic(err)
}
但是在设置标题时,我找不到任何只传递 json.RawMessage 格式的好方法。最理想的是,我只想做这样的事情:
req.Header = http.Header{newEvent.Request.Headers}
是否有任何智能解决方案,或者我是否必须选择将标头解组为字符串,然后解析字符串并将它们全部添加http.Header.Add()?
慕工程0101907
函数式编程
相关分类