基于组成部分构建HTTP请求

基于组成部分构建HTTP请求,http,go,Http,Go,假设我有一个HTTP请求的表示,它被分解成如下几个部分:方法、URI、查询参数、头和主体 所以我可能会说: Method: POST Headers: [Content-Type: application/json, Host: localhost:8080, etc...] Path: /home/sweet Query: name=dan&id=1 Body: "some JSON here" 如何将其重建为有效的net/http请求对象?我希望尽可能避免字符串格式化和构建。创建h

假设我有一个HTTP请求的表示,它被分解成如下几个部分:方法、URI、查询参数、头和主体

所以我可能会说:

Method: POST
Headers: [Content-Type: application/json, Host: localhost:8080, etc...]
Path: /home/sweet
Query: name=dan&id=1
Body: "some JSON here"

如何将其重建为有效的net/http请求对象?我希望尽可能避免字符串格式化和构建。

创建
http.Request
,实际上只有一种方法,那就是使用。它已经将三个组成部分作为参数:方法、路径和主体

在调用
NewRequest
之前,需要将查询参数组合到URL中。该一揽子计划,特别是,可能会在这方面有所帮助

一旦您有了新的请求,您就可以按预期添加标题:

req, err := http.NewRequest("GET", "http://example.com/?foo=bar", body)
req.Header.Add("Content-Type", "application/json")

如果需要说明,主体必须是一个
io.Reader
,但这给了您完全的灵活性。

如果可能的话,我希望避免构建字符串。在您的示例中,我必须将主机头与路径连接起来,并添加方案。
url
包可能会对您有所帮助。它可以为您进行URL编码/连接。这是否容易取决于您如何接收查询参数。