如何在 Golang 中复制 http.Get(url) 请求的响应
how to make a copy of response of http.Get(url) request in Golang
我正在尝试使用 resp, err := http.Get(url)
命令将响应写入文件,并使用相同的响应来提取链接。
在我使用resp.Write(f)
将内容写入文件后,我无法将resp.Body
用于其他目的(对于上述url的响应)而无需另外[=15] =]请求。
我试过了resp2 := bytes.NewBuffer(resp)
。它给出错误,因为类型不匹配。我也试过复制。
假设响应适合内存,只需创建一个缓冲区并使用resp.Write,如(未经测试,基本正确):
var b bytes.Buffer
if err := resp.Write(b); err != nil {
// handle error
} else {
// Do something with buffer
}
对于适用于任何 reader 的代码,请使用:ioutil.ReadAll,其中 returns 一个包含数据的新 [] 字节,然后您可以将其包装在 bytes.Buffer
httputil 有一个响应转储。 https://golang.org/pkg/net/http/httputil/#DumpRequest
它将用 in-memory 副本替换正文,以便您可以重复使用它。
我正在尝试使用 resp, err := http.Get(url)
命令将响应写入文件,并使用相同的响应来提取链接。
在我使用resp.Write(f)
将内容写入文件后,我无法将resp.Body
用于其他目的(对于上述url的响应)而无需另外[=15] =]请求。
我试过了resp2 := bytes.NewBuffer(resp)
。它给出错误,因为类型不匹配。我也试过复制。
假设响应适合内存,只需创建一个缓冲区并使用resp.Write,如(未经测试,基本正确):
var b bytes.Buffer
if err := resp.Write(b); err != nil {
// handle error
} else {
// Do something with buffer
}
对于适用于任何 reader 的代码,请使用:ioutil.ReadAll,其中 returns 一个包含数据的新 [] 字节,然后您可以将其包装在 bytes.Buffer
httputil 有一个响应转储。 https://golang.org/pkg/net/http/httputil/#DumpRequest 它将用 in-memory 副本替换正文,以便您可以重复使用它。