Cookies management by TermsFeed Cookie Consent

πŸ“Ÿ Convert HTTP response io.ReadCloser to string in Go

introduction http

When you send an HTTP request to a server, you often want to read the contents of the response. In Go, the body of the response can be found in the Response.Body field of the http.Response object, which is returned as the result of sending a request by an HTTP client. The HTTP response body in Go is of type io.ReadCloser. To convert the io.ReadCloser object to a string, you need to read the contents of this field using the io.ReadAll() function.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest(http.MethodGet, "https://example.com/", nil)
    if err != nil {
        log.Fatal(err)
    }
    resp, err := client.Do(req)
    if err != nil {
        log.Fatal(err)
    }

    bytes, err := io.ReadAll(resp.Body)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(string(bytes))
}

In the example above, we are making a standard GET request to the https://example.com/ website. On line 21, we read the response body with the io.ReadAll() function. This function returns the read response body as a slice of bytes, so in order to print it, we need to convert it to a string.

As the output of the example, you will see the HTML content of the https://example.com/ website:

<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
        background-color: #f0f0f2;
        margin: 0;
        padding: 0;
        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
        
    }
    div {
        width: 600px;
        margin: 5em auto;
        padding: 2em;
        background-color: #fdfdff;
        border-radius: 0.5em;
        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
    }
    a:link, a:visited {
        color: #38488f;
        text-decoration: none;
    }
    @media (max-width: 700px) {
        div {
            margin: 0 auto;
            width: auto;
        }
    }
    </style>    
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is for use in illustrative examples in documents. You may use this
    domain in literature without prior coordination or asking for permission.</p>
    <p><a href="https://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>

Thank you for being on our site 😊. If you like our tutorials and examples, please consider supporting us with a cup of coffee and we'll turn it into more great Go examples.

Have a great day!

Buy Me A Coffee

πŸ“” Convert a struct to io.Reader in Go

Learn how to convert a struct to io.Reader and send it as an HTTP POST request body
introduction http

♾️ Infinite loop in Go

Learn how to define a “while true” loop
introduction loop

πŸ§‘β€πŸ€β€πŸ§‘ Copy a slice in Go

Learn how to make a deep copy of a slice
introduction slice