go - 是否有Go http方法将整个http响应转换为 byte slice ?

标签 go io httpresponse

我一直在想是否已经有一种方法可以将所有http/Response都写入[]byte?我发现有答复指出,可以通过执行[]byte轻松地将主体转换为ioutil.ReadAll(response.Body),但是是否存在一种已经构建好的解决方案,可以写入所有信息(包括状态码, header ,尾部等)?
我问的原因是因为我希望通过套接字将整个响应传输到客户端,并且Write库的net方法需要一个字节数组。

最佳答案

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

package main

import (
    "fmt"
    "net/http"
    "net/http/httptest"
    "net/http/httputil"
    "os"
)

func main() {
    // Create a test server
    server := httptest.NewServer(http.HandlerFunc(
        func(w http.ResponseWriter, r *http.Request) {
            // Set Header
            w.Header().Set("HEADER_KEY", "HEADER_VALUE")
            // Set Response Body
            fmt.Fprintln(w, "DUMMY_BODY")
        }))
    defer server.Close()

    // Request to the test server
    resp, err := http.Get(server.URL)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
    defer resp.Body.Close()

    // DumpResponse takes two parameters: (resp *http.Response, body bool)
    // where resp is the pointer to the response object. And body is boolean
    // to dump body or not
    dump, err := httputil.DumpResponse(resp, true)
    if err != nil {
        fmt.Fprintln(os.Stderr, err)
        os.Exit(1)
    }
    // Dump the response ([]byte)
    fmt.Printf("%q", dump)
}
输出:
"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"

关于go - 是否有Go http方法将整个http响应转换为 byte slice ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64897956/

相关文章:

go - 为什么我会根据调用 BindPFlag 的位置收到零指针错误?

Linux:ioctl/FIONREAD 返回 0 字节可用在/dev/random?

http - Pragma 和 Cache-Control header 之间的区别?

reactjs - 将多个图像从 python 服务器发送到 react 前端

php - 使用 laravel 5 发送重定向和设置 cookie

go - 替换go.sum中的字符串

go - 是否可以进行configure-make-make安装?

golang - 如何获取错误 "evaluated but not used"

写端口的C语言宏

Java 周期性地卡在 futex 和非常低的 IO 输出