Making HTTP requests in Go
Welcome Gophers! In this tutorial, we are going to be taking a quick look at how we can make HTTP requests in Go!
In Go, we can use the net/http
package in order to help us make our own HTTP requests.
Importing the Package
To use the net/http package in your Go program, you will need to import it first:
import "net/http"
Making a GET Request
The most basic type of HTTP request is a GET
request. To make a GET
request, you can use the http.Get
function like so:
resp, err := http.Get("http://www.example.com/")
if err != nil {
// handle error
}
defer resp.Body.Close()
The http.Get
function sends a GET
request to the specified URL and returns a response object and an error. If there was an error making the request, the error will be non-nil.
The response object has a number of fields, including the status code, headers, and the response body. You can read the response body using the io.Reader interface:
body, err := io.ReadAll(resp.Body)
if err != nil {
// handle error
}
fmt.Println(string(body))
The io.ReadAll
function reads the entire response body into a byte slice. You can then convert the byte slice to a string and print it out.
Making a POST Request
Now that we’ve mastered the GET
request, let’s take a look at other types of requests that we could be making.
To make a POST request, you can use the http.Post function:
resp, err := http.Post("http://www.example.com/post", "application/x-www-form-urlencoded", strings.NewReader("name=value"))
if err != nil {
// handle error
}
defer resp.Body.Close()
The http.Post
function takes three arguments: the URL, the content type of the request body, and the request body itself. In this example, we are sending a POST request with a form-encoded body.
Customizing the Request
To customize the HTTP request further, you can use the http.NewRequest
function to create an *http.Request
object:
req, err := http.NewRequest("GET", "http://www.example.com/", nil)
if err != nil {
// handle error
}
req.Header.Set("User-Agent", "MyUserAgent/1.0")
The http.NewRequest
function takes three arguments: the HTTP method, the URL, and the request body. In this example, we are creating a GET request with no request body.
You can then set headers on the request using the Header field of the *http.Request
object. In this example, we are setting the User-Agent
header.
To send the request, you can use the http.DefaultClient.Do
function:
resp, err := http.DefaultClient.Do(req)
if err != nil {
// handle error
}
defer resp.Body.Close()
The http.DefaultClient.Do
function sends the request and returns a response.
That’s it! You now know how to make HTTP requests in Go.