Heim >Backend-Entwicklung >Golang >Wie breche ich eine POST-Anfrage eines Go-HTTP-Clients vor dem Abschluss ab?

Wie breche ich eine POST-Anfrage eines Go-HTTP-Clients vor dem Abschluss ab?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-27 07:50:09679Durchsuche

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

Vorzeitiges Abbrechen einer Go-HTTP-Client-POST-Anfrage

In Go wird die http.Client-Bibliothek häufig für clientseitige HTTP-Anfragen verwendet. Bei der Durchführung langer Polling-Vorgänge kann es aufgrund von Benutzeraktionen oder anderen Ereignissen erforderlich sein, die Anfrage vorzeitig abzubrechen.

Der Standardansatz, um einer clientseitigen Anfrage zuvorzukommen oder sie abzubrechen, besteht darin, eine Zeitüberschreitung festzulegen http.Transport. Dieser Mechanismus ermöglicht jedoch nur einen Abbruch basierend auf Zeitüberschreitungen und nicht auf vom Benutzer initiierten Aktionen.

Eine flexiblere Lösung ist die Verwendung der Funktion http.Request.WithContext. Mit dieser Funktion kann die Anfrage einem Kontext zugeordnet werden.Kontext. Der Kontext kann dann storniert oder mit einer Frist versehen werden, sodass eine Stornierung jederzeit möglich ist.

So implementieren Sie diesen Ansatz:

  1. Erstellen Sie wie gewohnt eine http.Request.
  2. Verwenden Sie req.WithContext(ctx), um die Anfrage einem Kontext zuzuordnen. Der Kontext kann mit context.WithDeadline oder context.WithCancel erstellt werden.
  3. Verwenden Sie das geänderte Anforderungsobjekt (req), um die Anforderung mithilfe der client.Do-Methode zu stellen.

Beispiel:

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.

Bei diesem Ansatz wird die Anfrage automatisch abgebrochen, wenn der Kontext abgebrochen wird oder die Frist abgelaufen ist läuft ab.

Das obige ist der detaillierte Inhalt vonWie breche ich eine POST-Anfrage eines Go-HTTP-Clients vor dem Abschluss ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn