Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Mengendalikan Kuki Pengesahan untuk Permintaan HTTP dalam Go?

Bagaimana Mengendalikan Kuki Pengesahan untuk Permintaan HTTP dalam Go?

DDD
DDDasal
2024-11-08 22:56:02477semak imbas

How to Handle Authentication Cookies for HTTP Requests in Go?

Memperbaiki Pengendalian Pengesahan untuk Pertanyaan HTTP dalam Go

Masalah:

Pertimbangkan kod berikut untuk melaksanakan permintaan HTTP dengan pengesahan:

client := &http.Client{}

// Authenticate
req, err := http.NewRequest("GET", "http://164.99.113.32/Authenticate", nil)
req.SetBasicAuth("<username>", "<password>")
resp, err := client.Do(req)
if err != nil {
    fmt.Printf("Error : %s", err)
}

// Get Details
req.URL, _ = url.Parse("http://164.99.113.32/Details")
resp, err = client.Do(req)
if err != nil {
    fmt.Printf("Error : %s", err)
}

Selepas mengesahkan berjaya, permintaan seterusnya untuk '/Butiran' gagal dengan ralat 401 yang dinafikan akses, walaupun tiada isu pada bahagian pelayan.

Penyelesaian:

Untuk menyelesaikan masalah ini, adalah perlu untuk menggunakan balang kuki untuk mengurus maklumat sesi. Pelanggan HTTP Go tidak mengendalikan perkara ini secara lalai, jadi kami mesti menentukan pelaksanaan balang kuki tersuai kami:

type myjar struct {
    jar map[string] []*http.Cookie
}

func (p* myjar) SetCookies(u *url.URL, cookies []*http.Cookie) {
    fmt.Printf("The URL is : %s\n", u.String())
    fmt.Printf("The cookie being set is : %s\n", cookies)
    p.jar [u.Host] = cookies
}

func (p *myjar) Cookies(u *url.URL) []*http.Cookie {
    fmt.Printf("The URL is : %s\n", u.String())
    fmt.Printf("Cookie being returned is : %s\n", p.jar[u.Host])
    return p.jar[u.Host]
}

Dalam fungsi utama, mulakan balang kuki tersuai dan berikannya kepada klien HTTP:

    jar := &myjar{}
    jar.jar = make(map[string] []*http.Cookie)
    client.Jar = jar

Dengan pelaksanaan ini, permintaan seterusnya boleh berjaya mengakses titik akhir '/Butiran'.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Kuki Pengesahan untuk Permintaan HTTP dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn