Go でテキスト ファイルからの HTTP リクエストとレスポンスを解析する
テキスト ファイルに保存された HTTP パイプライン ストリームを操作する場合、リクエストとレスポンスを解析するさらなる処理にとって重要です。この記事では、http.ReadRequest 関数と http.ReadResponse 関数を使用して、Go でこれを効果的に実現する方法を検討します。
問題
次のようなテキスト ファイルがあるとします。一連の HTTP リクエストとレスポンス。目標は、これらのコンポーネントをデータ構造、具体的には接続のスライスに解析することです。
解決策
前述の関数を活用すると、テキスト ファイルからのリクエストとレスポンスの両方を解析する簡単なアプローチが提供されます。
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 }
使用法
この関数を使用するには、単に入力を読み取るだけですテキスト ファイルをリーダーに読み込み、ReadHTTPFromFile を呼び出します。この関数は Connection インスタンスのスライスを返します。各接続はリクエストとそれに関連付けられたレスポンスを表します。
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) }
補足
以上がGo でテキスト ファイルからの HTTP リクエストとレスポンスを解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。