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!