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 }
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) }
Notes supplémentaires
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!