Résiliation prématurée d'une requête HTTP POST en Golang
Dans le cadre de la mise en œuvre d'un client à interrogation longue utilisant http.Client, la nécessité Il arrive fréquemment de fermer ou d'annuler prématurément une requête HTTP POST. Alors que l'approche traditionnelle impliquait la fermeture du corps de la réponse (resp.Body.Close()) dans une goroutine distincte, elle introduit des complications car le client est généralement bloqué lors de la lecture de la réponse.
Cependant, la stratégie préférée actuelle pour la demande d’annulation implique l’utilisation d’un contexte avec des délais ou qui peut être annulé selon les besoins. Ceci est réalisé grâce à la méthode http.Request.WithContext.
Voici comment vous pouvez intégrer cette stratégie dans votre code :
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)
En définissant le contexte sur la requête, toutes les opérations ultérieures sur cette demande respectera la date limite ou l’état d’annulation de ce contexte. Par exemple, si le contexte est annulé avant que la requête ne soit terminée, le transport sous-jacent recevra une erreur et la requête sera abandonnée. Cela fournit un mécanisme clair et concis pour mettre fin prématurément à une requête HTTP POST du côté client.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!