Go でテキスト ファイルからの HTTP リクエストとレスポンスを解析する
Go でテキスト ファイルからの HTTP リクエストとレスポンスを解析するには、構築された-in HTTP 解析関数。これを実現するには、次のアプローチを使用できます。
func ReadHTTPFromFile(r io.Reader) ([]Connection, error) { // Establish a new buffered reader to process the input. buf := bufio.NewReader(r) // Define a slice that will store HTTP connection information. stream := make([]Connection, 0) // Loop indefinitely to parse request and response pairs until we reach the end of the file. for { // Attempt to parse an HTTP request using ReadRequest. req, err := http.ReadRequest(buf) // Check if we have reached the end of the file or an error occurred. if err == io.EOF { // Break out of the loop since we have reached the end of the file. break } else if err != nil { // Log the error and return the partially parsed stream. log.Println("Error parsing HTTP request:", err) return stream, err } // Now that we have a request, we need to parse the corresponding HTTP response. resp, err := http.ReadResponse(buf, req) // Check for any errors while parsing the response. if err != nil { // Log the error and return the partially parsed stream. log.Println("Error parsing HTTP response:", err) return stream, err } // Copy the response body to a new buffer to preserve it. var b bytes.Buffer io.Copy(&b, resp.Body) // Close the original response body and replace it with a new, non-closing one. resp.Body.Close() resp.Body = ioutil.NopCloser(&b) // Add the connection to our stream. stream = append(stream, Connection{Request: req, Response: resp}) } // Return the parsed stream. return stream, nil }
この関数を使用すると、HTTP リクエストとレスポンスを含むファイルを開いて、それらを解析できます。例:
func main() { // Open a file for reading. file, err := os.Open("http.txt") if err != nil { log.Fatal(err) } // Parse the HTTP requests and responses from the file. stream, err := ReadHTTPFromFile(file) if err != nil { log.Fatal(err) } // Dump a representation of the parsed requests and responses for inspection. for _, c := range stream { reqDump, err := httputil.DumpRequest(c.Request, true) if err != nil { log.Fatal(err) } respDump, err := httputil.DumpResponse(c.Response, true) if err != nil { log.Fatal(err) } fmt.Println(string(reqDump)) fmt.Println(string(respDump)) } }
このコードは、「http.txt」ファイルの内容を読み取り、HTTP リクエストとレスポンスを解析し、検査のためにそれらの表現をダンプします。 Go 標準ライブラリが提供する HTTP 解析関数を使用すると、テキスト ファイル ストリームからリクエストとレスポンスを抽出して操作できます。
以上がGo でテキスト ファイルからの HTTP リクエストとレスポンスを解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。