Maison >développement back-end >Golang >Comment analyser les requêtes et les réponses HTTP pipelinées à partir d'un fichier texte dans Go ?
Dans un scénario typique, nous rencontrons des pipelines de requêtes et de réponses HTTP stockées dans des fichiers texte. Le défi se pose lorsque nous devons analyser ces messages pipelines dans un format structuré pour une analyse ou un traitement ultérieur. Cet article vous guidera à travers les étapes d'analyse des requêtes HTTP et des réponses d'un tel fichier texte dans Go.
La bibliothèque standard Go fournit une fonction pratique, http.ReadRequest, ce qui simplifie l'analyse des requêtes HTTP. Il lit la ligne de requête, les en-têtes et le corps (si spécifié par l'en-tête Content-Length) à partir d'un *bufio.Reader.
req, err := http.ReadRequest(buf) if err != nil { return err }
La fonction http.ReadResponse effectue une tâche similaire pour les réponses HTTP. Il lit la ligne d'état, les en-têtes et le corps du *bufio.Reader.
resp, err := http.ReadResponse(buf, req) if err != nil { return err }
La fonction http.ReadResponse ferme automatiquement le corps de la réponse au retour. Pour conserver le corps pour une utilisation ultérieure, nous devons le copier manuellement dans un autre tampon.
b := new(bytes.Buffer) io.Copy(b, resp.Body) resp.Body.Close() resp.Body = ioutil.NopCloser(b)
Pour analyser le pipeline HTTP à partir d'un fichier, nous utilisons le package bufio pour lire le fichier ligne par ligne et créer une tranche de structures de connexion pour stocker les demandes et les réponses analysées.
stream := make([]Connection, 0) for { req, err := http.ReadRequest(buf) if err == io.EOF { break } resp, err := http.ReadResponse(buf, req) if err != nil { return err } ... stream = append(stream, Connection{Request: req, Response: resp}) }
À des fins de vérification, nous pouvons utiliser httputil.DumpRequest et httputil.DumpResponse pour vider les demandes et les réponses analysées dans des chaînes pour inspection.
b, err := httputil.DumpRequest(c.Request, true) if err != nil { log.Fatal(err) } fmt.Println(string(b)) b, err = httputil.DumpResponse(c.Response, true) if err != nil { log.Fatal(err) } fmt.Println(string(b))
Par en tirant parti des fonctions http.ReadRequest et http.ReadResponse ainsi que d'une gestion minutieuse du corps, nous pouvons analyser efficacement les requêtes HTTP en pipeline et les réponses d'un fichier texte dans Go. Cette approche nous permet d'analyser, de traiter ou de tester des scénarios de communication HTTP de manière pratique et fiable.
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!