When an HTTP request triggers a 302 redirect with an accompanying cookie, you may face difficulties ensuring that your Go client follows the new location while retaining the cookie. This article explores a solution to this challenge, borrowing inspiration from the popular command-line tool, cURL.
How can you, in Go, configure your client to follow HTTP redirects while carrying the received cookies, akin to cURL's settings?
Introduce the Go module net/http/cookiejar into your project. This package provides effective cookie handling capabilities. Here's an example that demonstrates its usage:
package main import ( "golang.org/x/net/publicsuffix" "io/ioutil" "log" "net/http" "net/http/cookiejar" ) func main() { // Create a CookieJar with customizable options. options := cookiejar.Options{ PublicSuffixList: publicsuffix.List, } jar, err := cookiejar.New(&options) if err != nil { log.Fatal(err) } // Instantiate an HTTP Client with the CookieJar attached. client := http.Client{Jar: jar} // Execute an HTTP request that includes a cookie. resp, err := client.Get("http://dubbelboer.com/302cookie.php") if err != nil { log.Fatal(err) } // Read the response body. data, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { log.Fatal(err) } // Print the response body, which ideally contains unique information set by the PHP script on the server. log.Println(string(data)) }
This solution emulates cURL's functionality by utilizing the CookieJar to store and transmit cookies between requests. When the client encounters a 302 redirect with a cookie, it automatically follows the new location while preserving the cookie-based session.
The above is the detailed content of How can I make my Go client follow HTTP redirects while retaining cookies, similar to cURL?. For more information, please follow other related articles on the PHP Chinese website!