Maison > développement back-end > Golang > Comment analyser les requêtes et les réponses HTTP à partir de fichiers texte dans Go ?

Comment analyser les requêtes et les réponses HTTP à partir de fichiers texte dans Go ?

Patricia Arquette
Libérer: 2025-01-04 07:00:35
original
307 Les gens l'ont consulté

How to Parse HTTP Requests and Responses from Text Files in Go?

Analyse des requêtes et des réponses HTTP à partir de fichiers texte dans Go

Lorsque vous travaillez avec des flux en pipeline HTTP stockés dans des fichiers texte, analyse des requêtes et des réponses est crucial pour la suite du traitement. Dans cet article, nous explorerons comment y parvenir efficacement dans Go à l'aide des fonctions http.ReadRequest et http.ReadResponse.

Problème

Étant donné un fichier texte contenant une séquence de requêtes et de réponses HTTP, le but est d'analyser ces composants dans une structure de données, en particulier une tranche de connexion instances.

Solution

L'exploitation des fonctions susmentionnées fournit une approche simple pour analyser à la fois les demandes et les réponses du fichier texte :

import (
    "bufio"
    "bytes"
    "fmt"
    "io"
    "io/ioutil"
    "log"
    "net/http"
    "net/http/httputil"
    "os"
)

type Connection struct {
    Request  *http.Request
    Response *http.Response
}

func ReadHTTPFromFile(r io.Reader) ([]Connection, error) {
    buf := bufio.NewReader(r)
    stream := make([]Connection, 0)

    for {
        req, err := http.ReadRequest(buf)
        if err == io.EOF {
            break
        }
        if err != nil {
            return stream, err
        }

        resp, err := http.ReadResponse(buf, req)
        if err != nil {
            return stream, err
        }

        // Save response body
        b := new(bytes.Buffer)
        io.Copy(b, resp.Body)
        resp.Body.Close()
        resp.Body = ioutil.NopCloser(b)

        stream = append(stream, Connection{Request: req, Response: resp})
    }
    return stream, nil
}
Copier après la connexion

Utilisation

Pour utiliser cette fonction, lisez simplement le fichier texte d'entrée dans un lecteur et appelez LireHTTPFromFile. La fonction renverra une tranche d'instances de connexion, où chaque connexion représente une requête et sa réponse associée.

f, err := os.Open("/tmp/test.http")
if err != nil {
    log.Fatal(err)
}
defer f.Close()
stream, err := ReadHTTPFromFile(f)
if err != nil {
    log.Fatalln(err)
}
Copier après la connexion

Notes supplémentaires

  • http.ReadRequest et http.ReadResponse peut être appelé à plusieurs reprises sur le même lecteur mis en mémoire tampon jusqu'à ce qu'il atteigne la fin du fichier.
  • Pour garantir la compatibilité avec votre fichier d'entrée, vérifiez qu'il inclut l'en-tête Content-Length avec des valeurs précises.
  • Si votre fichier d'entrée contient des réponses tronquées, comme dans l'exemple fourni, vous pouvez envisager d'utiliser httputil.DumpResponse pour garantir une représentation plus complète. du contenu de la réponse.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal