ホームページ >バックエンド開発 >Golang >cURL と同様に、Cookie を保持しながら Go クライアントが HTTP リダイレクトに従うようにするにはどうすればよいですか?

cURL と同様に、Cookie を保持しながら Go クライアントが HTTP リダイレクトに従うようにするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 21:24:02306ブラウズ

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 リダイレクトに従うようにクライアントを構成するにはどうすればよいですか? cURL の設定と同様に、受信した Cookie を保持しますか?

解決策

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 ベースのセッションを維持しながら、自動的に新しい場所をたどります。

以上がcURL と同様に、Cookie を保持しながら Go クライアントが HTTP リダイレクトに従うようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。