Go でのテキスト ファイルからの HTTP リクエストとレスポンスの解析
はじめに
この質問は解析に焦点を当てていますConnection 構造体の Go スライスへの HTTP リクエストとレスポンスのストリームを含むテキスト ファイル。各 Connection 構造体には、HTTP リクエストとレスポンスが含まれています。
問題の概要
HTTP リクエストとレスポンスを含むテキスト ファイルが与えられた場合、タスクはそれを []Connection スライスに解析することです。 http.ReadRequest 関数を使用してリクエストを解析できます。ただし、応答を解析する組み込み関数はありません。
実装
この解決策には次の手順が含まれます:
バッファード リーダーの作成:
buf := bufio.NewReader(r)
ここでr は、テキスト ファイルを表す io.Reader インスタンスです。
反復解析:
for { req, err := http.ReadRequest(buf)
a. http.ReadRequest を使用して、次のリクエストを解析します。 stream.
b. EOF を確認します (err == io.EOF)。到達した場合、ループから抜け出します。
c. エラーが発生した場合は、エラーを含む解析されたストリームを返します。
応答解析:
resp, err := http.ReadResponse(buf, req)
レスポンスボディの処理:
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})
ループ終了:
if err == io.EOF { break }
使用例:
f, err := os.Open("/tmp/test.http") stream, err := ReadHTTPFromFile(f)
結論
このメソッドは、テキスト ファイルからの HTTP リクエストと応答を効果的に解析し、解析されたデータを []Connection スライスに設定します。 。応答本文を正しく処理し、パイプライン ストリーム内の複数の要求と応答を正しく解析できるようにします。
以上がGo でテキスト ファイルからの HTTP リクエストとレスポンスを解析する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。