首页 >后端开发 >Golang >如何让我的 Go 客户端遵循 HTTP 重定向,同时保留 cookie,类似于 cURL?

如何让我的 Go 客户端遵循 HTTP 重定向,同时保留 cookie,类似于 cURL?

Patricia Arquette
Patricia Arquette原创
2024-11-05 21:24:02304浏览

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

Go:处理 Cookie 辅助重定向

当 HTTP 请求触发带有附带 cookie 的 302 重定向时,您可能会面临确保 Go 客户端遵循新规则的困难位置,同时保留 cookie。本文借鉴流行的命令行工具 cURL 的灵感,探讨了这一挑战的解决方案。

问题陈述

如何在 Go 中将客户端配置为遵循 HTTP 重定向,同时携带接收到的cookie,类似于cURL的设置?

解决方案

在项目中引入Go模块net/http/cookiejar。该包提供了有效的 cookie 处理功能。下面是一个演示其用法的示例:

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))
}

此解决方案通过利用 CookieJar 在请求之间存储和传输 cookie 来模拟 cURL 的功能。当客户端遇到带有 cookie 的 302 重定向时,它会自动遵循新位置,同时保留基于 cookie 的会话。

以上是如何让我的 Go 客户端遵循 HTTP 重定向,同时保留 cookie,类似于 cURL?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn