Menyiasat URL tanpa Ubah Hala dalam Go
Dalam ujian penanda aras untuk skrip ubah hala, adalah perlu untuk menanya URL tanpa memulakan ubah hala automatik . Ini memerlukan menghalang atur cara daripada memuat turun kandungan yang diubah hala semasa masih mengelog URL ubah hala atau sebarang ralat yang berkaitan.
Penyelesaian 1: Menggunakan http.DefaultTransport.RoundTrip
Satu pendekatan adalah untuk memanfaatkan fungsi http.DefaultTransport.RoundTrip() dalam http.Request anda. Tidak seperti http.Client, Transport tidak mengikut ubah hala secara automatik:
req, err := http.NewRequest("GET", "http://example.com/redirectToAppStore", nil) // ... resp, err := http.DefaultTransport.RoundTrip(req)
Walau bagaimanapun, penyelesaian ini mungkin menghadapi masalah prestasi dan ralat di bawah senario beban tinggi.
Penyelesaian 2: Tetapan CheckRedirect to False
Sebagai alternatif, anda boleh mengubah suai medan CheckRedirect pada http.Pelanggan untuk melumpuhkan ubah hala automatik:
client := &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, } // ... resp, err := client.Get("http://example.com/redirectToAppStore")
Kaedah ini memastikan prestasi yang konsisten, tetapi ia tidak menjamin penutupan sambungan selepas setiap pertanyaan.
Memastikan Penutupan Sambungan
Untuk menguatkuasakan penutupan sambungan, anda boleh membuat klien HTTP baharu untuk setiap permintaan:
for i := 0; i < n; i++ { client := &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse }, } resp, err := client.Get("http://example.com/redirectToAppStore") // ... }
Pendekatan ini memastikan setiap pertanyaan menggunakan sambungan baharu, menghalang isu prestasi akibat penggunaan semula sambungan.
Atas ialah kandungan terperinci Bagaimana untuk Menyoal URL dalam Go tanpa Mengikuti Ubah Hala?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!