Heim >Backend-Entwicklung >Golang >Wie kann ich eine HTTP-POST-Anfrage in Golang vorzeitig beenden?

Wie kann ich eine HTTP-POST-Anfrage in Golang vorzeitig beenden?

Linda Hamilton
Linda HamiltonOriginal
2024-11-25 18:28:11494Durchsuche

How to Prematurely Terminate an HTTP POST Request in Golang?

Vorzeitige Beendigung einer HTTP-POST-Anfrage in Golang

Im Zusammenhang mit der Implementierung eines Long-Polling-Clients mithilfe von http.Client besteht die Notwendigkeit Dies führt häufig dazu, dass eine HTTP-POST-Anfrage vorzeitig geschlossen oder abgebrochen wird. Während der traditionelle Ansatz darin bestand, den Antworttext (bzw.Body.Close()) in einer separaten Goroutine zu schließen, führt dies zu Komplikationen, da der Client normalerweise beim Lesen der Antwort blockiert wird Bei der Anforderungsstornierung wird ein Kontext mit Fristen verwendet, der bei Bedarf storniert werden kann. Dies wird durch die Methode http.Request.WithContext erreicht.

So können Sie diese Strategie in Ihren Code integrieren:

Durch Festlegen des Kontexts für die Anfrage werden alle nachfolgenden Vorgänge aktiviert Diese Anfrage respektiert die Frist oder den Stornierungsstatus dieses Kontexts. Wenn der Kontext beispielsweise abgebrochen wird, bevor die Anfrage abgeschlossen ist, erhält der zugrunde liegende Transport einen Fehler und die Anfrage wird abgebrochen. Dies bietet einen klaren und präzisen Mechanismus zum vorzeitigen Beenden einer HTTP-POST-Anfrage von der Clientseite.
import (
    "context"
    "net/http"
)

// ...

// Create a context with a deadline or that can be canceled
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()

req, err := http.NewRequest("POST", "http://example.com", bytes.NewBuffer(jsonPostBytes))
// ...

// Add the context to the request
req = req.WithContext(ctx)

// Perform the request
resp, err := client.Do(req)

Das obige ist der detaillierte Inhalt vonWie kann ich eine HTTP-POST-Anfrage in Golang vorzeitig beenden?. 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