Menyiasat URL Tanpa Ubah Hala dalam Go
Dalam artikel ini, kami menangani isu menanya URL tanpa mencetuskan ubah hala automatik dalam Go. Ini selalunya diperlukan untuk tujuan penandaarasan atau apabila anda hanya perlu log URL ubah hala atau ralat.
Penyelesaian 1: Menggunakan http.DefaultTransport.RoundTrip
Buat http .Minta objek seperti biasa. Daripada menghantarnya kepada http.Client, gunakan http.DefaultTransport.RoundTrip() untuk membuat permintaan. Ini memintas pengendalian ubah hala terbina dalam http.Klien.
import "net/http" func QueryURLWithoutRedirect(url string) (*http.Response, error) { req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } return http.DefaultTransport.RoundTrip(req) }
Penyelesaian 2: Lumpuhkan Ubah Hala dengan CheckRedirect
Buat http.Client dengan set medan CheckRedirect kepada tiada. Ini mengkonfigurasi pelanggan untuk tidak mengikuti ubah hala.
import "net/http" func QueryURLWithoutRedirect(url string) (*http.Response, error) { client := &http.Client{ CheckRedirect: nil, } return client.Get(url) }
Pertimbangan Lanjut
Walaupun kedua-dua penyelesaian menyediakan fungsi yang diingini, pendekatan pertama mungkin mengalami masalah prestasi di bawah beban tinggi , kerana ia mungkin menggunakan semula sambungan yang ditutup lebih awal.
Untuk memastikan setiap pertanyaan membuka sambungan baharu dengan pendekatan kedua, anda boleh mencipta http.Client baharu untuk setiap permintaan dalam satu gelung. Walau bagaimanapun, ini mungkin tidak perlu, kerana Go menutup sambungan terbiar secara automatik selepas tempoh tertentu.
Akhirnya, pilihan pendekatan bergantung pada keperluan prestasi khusus anda dan gelagat yang anda inginkan dalam senario dunia sebenar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyoal URL dalam Go Tanpa Mengikuti Ubah Hala?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!