ホームページ  >  記事  >  バックエンド開発  >  golang クッキーリクエスト

golang クッキーリクエスト

王林
王林オリジナル
2023-05-21 18:42:08725ブラウズ

Golang で HTTP リクエストを行う場合、通常は Cookie などの認証情報を使用する必要があり、さらに Cookie を取得する必要があります。この記事では、Golang を使用して Cookie を含む HTTP リクエストを開始し、後で使用できるように Cookie を変数に保存する方法を紹介します。

HTTP と Cookie の概要

HTTP (ハイパーテキスト転送プロトコル) は、クライアントとサーバー間のデータ転送を可能にするプロトコルです。クライアントがリクエストを送信すると、サーバーは応答を返し、リクエストされたリソースを提供します。 HTTPリクエストは主に以下の部分で構成されます。

  • HTTPメソッド(GET、POST、PUT、DELETEなど)
  • URL
  • リクエストヘッダ(リクエストヘッダ情報) 、ユーザー エージェント、言語、コンテンツ タイプなどが含まれます。)
  • リクエスト本文 (オプション、POST または PUT メソッドに適用可能)

そして、応答には通常、次の部分が含まれます:

  • ステータス コード (200 OK、404 Not Found など)
  • レスポンス ヘッダー (サーバー タイプ、時刻、コンテンツ タイプなどを含むレスポンス ヘッダー情報)
  • レスポンスボディ (レスポンスコンテンツ)

HTTP ヘッダーには Cookie を含めることができます。Cookie は通常、認証やユーザー情報の記憶などに使用されます。 Cookie はクライアントのブラウザに保存され、訪問したサイトに関するデータが含まれています。 HTTP リクエストを行う際に身元を確認する必要がある場合は、通常、Cookie を介して認証情報を渡す必要があります。

Golang は Cookie リクエストを開始します

Golang では、標準ライブラリの net/http パッケージを使用して HTTP リクエストを開始できます。リクエストを行うときに HTTP ヘッダーの Cookie フィールドを設定することによって Cookie を渡すことも、Cookie パッケージを使用して Cookie を簡単に管理することもできます。

次は、net/http パッケージを使用してリクエストを開始し、Cookie を取得する簡単なサンプル コードです。

package main

import (
    "fmt"
    "net/http"
)

func main() {
    // 创建请求客户端
    client := &http.Client{}

    // 创建请求
    req, err := http.NewRequest("GET", "https://example.com", nil)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 发送请求并获取响应
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()

    // 获取 Cookie
    cookies := resp.Cookies()
    for _, cookie := range cookies {
        fmt.Printf("%s: %s
", cookie.Name, cookie.Value)
    }
}

上記のコードはリクエスト クライアントを作成し、NewRequest メソッドを使用してGET リクエスト、およびリクエストを送信して応答を取得します。応答には Cookie コンテンツが含まれているため、 resp.Cookies() メソッドを使用して Cookie 情報を取得し、出力を繰り返し実行します。

通常、Cookie 情報を渡すには、リクエスト ヘッダーに Cookie フィールドを設定する必要があります。以下は、Cookie フィールドを設定してリクエストを開始する例です:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    // 创建请求
    req, err := http.NewRequest("GET", "https://example.com", nil)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 设置 Cookie
    cookie := &http.Cookie{Name: "name", Value: "value"}
    req.AddCookie(cookie)

    // 发起请求并获取响应
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()

    // 获取响应内容
    fmt.Println(resp.Status)
}

上記のコードは、 GET リクエスト、そして req.AddCookie(cookie) メソッドを通じて Cookie を設定し、net/http パッケージの client.Do(req) メソッドを使用してリクエストを開始し、応答を取得し、応答ステータス コードを出力します。

Cookies パッケージ

Cookie フィールドと resp.Cookies() メソッドの設定に加えて、Cookie パッケージを使用して Cookie を簡単に管理および処理することもできます。このパッケージは、次の 2 つの構造を提供します。

  • Cookie: HTTP Cookie を表します。
  • Jar: Cookie コレクションを表します。

以下は、cookie パッケージを使用して Cookie を管理する例です。

package main

import (
    "fmt"
    "net/http"
    "net/http/cookiejar"
)

func main() {
    // 创建 Cookie 集合
    jar, err := cookiejar.New(nil)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 创建请求客户端
    client := &http.Client{
        Jar: jar,
    }

    // 创建请求
    req, err := http.NewRequest("GET", "https://example.com", nil)
    if err != nil {
        fmt.Println(err)
        return
    }

    // 发送请求并获取响应
    resp, err := client.Do(req)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()

    // 打印 Cookie
    cookies := jar.Cookies(req.URL)
    for _, cookie := range cookies {
        fmt.Printf("%s: %s
", cookie.Name, cookie.Value)
    }
}

上記のコードは、cookiejar パッケージを使用して CookieJar を作成し、それを要求元のクライアントに渡します。次に、URL と印刷出力を通じて Cookie を取得します。

結論

この記事では、Golang を使用して Cookie による HTTP リクエストを開始する方法を紹介します。上記の方法に加えて、ここでは紹介しませんが、GoRequest、gin Framework などのサードパーティ ライブラリを使用することもできます。実際の使用においては、状況に応じて最適な方法を選択する必要があります。

以上がgolang クッキーリクエストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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