Home >Backend Development >Golang >How can I make my Go client follow HTTP redirects while retaining cookies, similar to cURL?

How can I make my Go client follow HTTP redirects while retaining cookies, similar to cURL?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 21:24:02315browse

How can I make my Go client follow HTTP redirects while retaining cookies, similar to cURL?

Go: Handling Cookie-Assisted Redirects

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.

Problem Statement

How can you, in Go, configure your client to follow HTTP redirects while carrying the received cookies, akin to cURL's settings?

Solution

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn