Dans le contexte d'une interrogation longue, où une connexion client-serveur est maintenue active pendant des périodes prolongées, elle peut devient nécessaire de mettre fin prématurément à la demande du côté client. Alors que la bibliothèque http.Client fournit un comportement de blocage par défaut pour les interrogations longues, la question se pose : comment une requête POST peut-elle être annulée ou abandonnée avant que la réponse ne soit entièrement reçue ?
L'approche traditionnelle consistant à appeler resp.Body .Close() pour fermer la réponse prématurément est déconseillé car cela nécessite une orchestration supplémentaire via un autre goroutine. De plus, l'utilisation de la fonction de délai d'attente de http.Transport peut ne pas correspondre au besoin d'annulations initiées par l'utilisateur.
Heureusement, l'écosystème Go a évolué pour fournir une solution plus rationalisée via http.Request.WithContext. Cela permet au client de spécifier un contexte limité dans le temps pour la demande, permettant ainsi une terminaison en douceur en réponse à des événements externes. L'extrait de code ci-dessous illustre cette approche :
// Create a new request with an appropriate context, using a deadline to terminate after a specific duration. req, err := http.NewRequest("POST", "http://example.com", nil) ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(5*time.Second)) req = req.WithContext(ctx) err = client.Do(req) if err != nil { // Handle the error, which may indicate a premature termination due to the context deadline. }
En appelant Cancel() sur l'objet contextuel, la requête peut être abandonnée à tout moment, déclenchant la fin de l'interrogation longue. Cela fournit un mécanisme fiable et efficace pour l'annulation contrôlée par l'utilisateur des requêtes HTTP POST.
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!