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 ?

Comment analyser les requêtes et les réponses HTTP pipelinées à partir d'un fichier texte dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-23 01:40:54452parcourir

How to Parse Pipelined HTTP Requests and Responses from a Text File in Go?

Analyse des requêtes et des réponses HTTP à 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.

Analyse des requêtes

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
}

Analyse de la réponse

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
}

Préservation du corps de la réponse

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)

Analyse du fichier

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})
}

Dumping pour Inspection

À 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))

Conclusion

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!

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