Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menggugurkan Permintaan POST Klien HTTP Go Sebelum Selesai?

Bagaimana untuk Menggugurkan Permintaan POST Klien HTTP Go Sebelum Selesai?

Patricia Arquette
Patricia Arquetteasal
2024-11-27 07:50:09742semak imbas

How to Abort a Go HTTP Client POST Request Before Completion?

Menggugurkan Permintaan POST Klien HTTP Go Secara Pramatang

Dalam Go, perpustakaan http.Client biasanya digunakan untuk permintaan HTTP pihak klien. Semasa menjalankan operasi tinjauan panjang, mungkin perlu membatalkan permintaan secara pramatang disebabkan oleh tindakan pengguna atau peristiwa lain.

Pendekatan standard untuk mendahului atau membatalkan permintaan pihak pelanggan adalah dengan menetapkan tamat masa menggunakan http.Pengangkutan. Walau bagaimanapun, mekanisme ini hanya membenarkan pembatalan berdasarkan tamat masa, bukan tindakan yang dimulakan pengguna.

Penyelesaian yang lebih fleksibel ialah menggunakan fungsi http.Request.WithContext. Fungsi ini membenarkan permintaan untuk dikaitkan dengan konteks.Konteks. Konteks kemudiannya boleh dibatalkan atau ditetapkan dengan tarikh akhir, membenarkan pembatalan pada bila-bila masa.

Untuk melaksanakan pendekatan ini:

  1. Buat http.Permintaan seperti biasa.
  2. Gunakan req.WithContext(ctx) untuk mengaitkan permintaan dengan konteks. Konteks boleh dibuat menggunakan context.WithDeadline atau context.WithCancel.
  3. Gunakan objek permintaan yang diubah suai (req) untuk membuat permintaan menggunakan kaedah klien.Do.

Contoh:

import (
    "context"
    "net/http"
)

// Create a context with a user-specified timeout or cancellation.
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel() // Remember to cancel the context when done.

// Create an HTTP request.
req, err := http.NewRequest("POST", "http://example.com", nil)
if err != nil {
    // Handle error.
}

// Add headers or other request-specific information.

// Associate the request with the context.
req = req.WithContext(ctx)

// Perform the request.
resp, err := client.Do(req)
if err != nil {
    // Handle error.
}
// ... // Handle the response as usual.

Menggunakan pendekatan ini, permintaan akan dibatalkan secara automatik jika konteks dibatalkan atau jika tarikh akhir tamat tempoh.

Atas ialah kandungan terperinci Bagaimana untuk Menggugurkan Permintaan POST Klien HTTP Go Sebelum Selesai?. 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