是否有一个Go http方法可以将整个http响应转换为字节片?

是否有一个Go http方法可以将整个http响应转换为字节片?,go,io,httpresponse,Go,Io,Httpresponse,我一直在想,是否已经有一种方法可以将所有http/Response写入[]字节?我发现一些响应指出,通过执行ioutil.ReadAll(response.body),可以轻松地将正文转换为[]字节,但是是否有一个已经构建的解决方案可以写入所有信息(包括状态码、标题、预告片等) 我之所以问这个问题,是因为我希望通过套接字将整个响应传输到客户端,net库的Write方法需要一个字节数组。是您所需要的(也是Adrian建议的)。以下代码应该有帮助: 主程序包 进口( “fmt” “net/http”

我一直在想,是否已经有一种方法可以将所有
http/Response
写入
[]字节
?我发现一些响应指出,通过执行
ioutil.ReadAll(response.body)
,可以轻松地将正文转换为
[]字节
,但是是否有一个已经构建的解决方案可以写入所有信息(包括状态码、标题、预告片等)

我之所以问这个问题,是因为我希望通过套接字将整个响应传输到客户端,
net
库的
Write
方法需要一个字节数组。

是您所需要的(也是Adrian建议的)。以下代码应该有帮助:

主程序包
进口(
“fmt”
“net/http”
“net/http/httptest”
“net/http/httputil”
“操作系统”
)
func main(){
//创建一个测试服务器
服务器:=httptest.NewServer(http.HandlerFunc(
func(w http.ResponseWriter,r*http.Request){
//设置标题
w、 Header().Set(“Header\u键”、“Header\u值”)
//集合响应体
fmt.Fprintln(w,“假车身”)
}))
延迟服务器。关闭()
//对测试服务器的请求
resp,err:=http.Get(server.URL)
如果错误!=零{
fmt.Fprintln(os.Stderr,err)
操作系统退出(1)
}
延迟响应主体关闭()
//DumpResponse有两个参数:(resp*http.Response,body bool)
//其中resp是指向响应对象的指针,body是布尔值
//抛尸还是不抛尸
dump,err:=httputil.DumpResponse(resp,true)
如果错误!=零{
fmt.Fprintln(os.Stderr,err)
操作系统退出(1)
}
//转储响应([]字节)
fmt.Printf(“%q”,转储)
}
输出:

"HTTP/1.1 200 OK\r\nContent-Length: 11\r\nContent-Type: text/plain; charset=utf-8\r\n
Date: Wed, 18 Nov 2020 17:43:40 GMT\r\n
Header_key: HEADER_VALUE\r\n\r\n
DUMMY_BODY\n"
这是你需要的(也是阿德里安建议的)。以下代码应该有帮助:

主程序包
进口(
“fmt”
“net/http”
“net/http/httptest”
“net/http/httputil”
“操作系统”
)
func main(){
//创建一个测试服务器
服务器:=httptest.NewServer(http.HandlerFunc(
func(w http.ResponseWriter,r*http.Request){
//设置标题
w、 Header().Set(“Header\u键”、“Header\u值”)
//集合响应体
fmt.Fprintln(w,“假车身”)
}))
延迟服务器。关闭()
//对测试服务器的请求
resp,err:=http.Get(server.URL)
如果错误!=零{
fmt.Fprintln(os.Stderr,err)
操作系统退出(1)
}
延迟响应主体关闭()
//DumpResponse有两个参数:(resp*http.Response,body bool)
//其中resp是指向响应对象的指针,body是布尔值
//抛尸还是不抛尸
dump,err:=httputil.DumpResponse(resp,true)
如果错误!=零{
fmt.Fprintln(os.Stderr,err)
操作系统退出(1)
}
//转储响应([]字节)
fmt.Printf(“%q”,转储)
}
输出:

"HTTP/1.1 200 OK\r\nContent-Length: 11\r\nContent-Type: text/plain; charset=utf-8\r\n
Date: Wed, 18 Nov 2020 17:43:40 GMT\r\n
Header_key: HEADER_VALUE\r\n\r\n
DUMMY_BODY\n"
用于将响应直接写入网络连接。或者,通过以下方式获取[]字节:
var buf bytes.Buffer;分别写入(&buf);p:=buf.Bytes()
。用于将响应直接写入网络连接。或者,通过以下方式获取[]字节:
var buf bytes.Buffer;分别写入(&buf);p:=buf.Bytes()