Maison  >  Article  >  développement back-end  >  Comment abandonner une requête POST du client HTTP Go avant la fin ?

Comment abandonner une requête POST du client HTTP Go avant la fin ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-27 07:50:09661parcourir

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

Abandon prématurément d'une requête POST du client HTTP Go

Dans Go, la bibliothèque http.Client est couramment utilisée pour les requêtes HTTP côté client. Lors de l'exécution d'opérations d'interrogation longues, il peut être nécessaire d'abandonner prématurément la requête en raison d'actions de l'utilisateur ou d'autres événements.

L'approche standard pour anticiper ou annuler une requête côté client consiste à définir un délai d'attente à l'aide de http.Transports. Cependant, ce mécanisme permet uniquement l'annulation en fonction des délais d'attente, et non des actions initiées par l'utilisateur.

Une solution plus flexible consiste à utiliser la fonction http.Request.WithContext. Cette fonction permet d'associer la requête à un contexte.Context. Le contexte peut ensuite être annulé ou fixé avec une date limite, permettant une annulation à tout moment.

Pour mettre en œuvre cette approche :

  1. Créez une http.Request comme d'habitude.
  2. Utilisez req.WithContext(ctx) pour associer la requête à un contexte. Le contexte peut être créé à l'aide de context.WithDeadline ou context.WithCancel.
  3. Utilisez l'objet de requête modifié (req) pour effectuer la requête à l'aide de la méthode client.Do.

Exemple :

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.

Grâce à cette approche, la requête sera automatiquement abandonnée si le contexte est annulé ou si le délai expire.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn