ホームページ >バックエンド開発 >Golang >Go でテキスト ファイルからパイプライン化された HTTP リクエストとレスポンスを解析するにはどうすればよいですか?

Go でテキスト ファイルからパイプライン化された HTTP リクエストとレスポンスを解析するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-23 01:40:54453ブラウズ

How to Parse Pipelined HTTP Requests and Responses from a Text File in Go?

Go でテキスト ファイルからの HTTP リクエストとレスポンスを解析する

典型的なシナリオでは、テキスト ファイルに保存された HTTP リクエストとレスポンスのパイプラインに遭遇します。分析やさらなる処理のために、これらのパイプライン化されたメッセージを構造化フォーマットに解析する必要がある場合に、課題が発生します。この記事では、Go でこのようなテキスト ファイルからの HTTP リクエストとレスポンスの両方を解析する手順を説明します。

リクエストの解析

Go の標準ライブラリには、便利な関数 http.ReadRequest が用意されています。これにより、HTTP リクエストの解析が簡素化されます。 *bufio.Reader からリクエスト行、ヘッダー、本文 (Content-Length ヘッダーで指定されている場合) を読み取ります。

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

レスポンス解析

http.ReadResponse 関数は次の処理を実行します。 HTTP 応答の場合も同様のタスクです。 *bufio.Reader からステータス行、ヘッダー、および本文を読み取ります。

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

応答本文の保持

http.ReadResponse 関数は、返されるときに応答本文を自動的に閉じます。後で使用できるように本文を保存するには、別のバッファに手動でコピーする必要があります。

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

ファイルの解析

ファイルから HTTP パイプラインを解析するには、bufio パッケージを使用します。ファイルを 1 行ずつ読み取り、解析されたリクエストを保存する接続構造体のスライスを作成します。

stream := make([]Connection, 0)
for {
    req, err := http.ReadRequest(buf)
    if err == io.EOF {
        break
    }
    resp, err := http.ReadResponse(buf, req)
    if err != nil {
        return err
    }
    ...
    stream = append(stream, Connection{Request: req, Response: resp})
}

検査のためのダンプ

検証の目的で、httputil.DumpRequest と httputil.DumpResponse を使用して、解析されたリクエストと応答を検査用の文字列にダンプできます。

b, err := httputil.DumpRequest(c.Request, true)
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(b))
b, err = httputil.DumpResponse(c.Response, true)
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(b))

結論

http.ReadRequest と http.ReadResponse を活用する関数を慎重なボディ処理とともに使用することで、Go のテキスト ファイルからの HTTP パイプライン リクエストとレスポンスを効果的に解析できます。このアプローチにより、HTTP 通信シナリオを便利かつ信頼性の高い方法で分析、処理、テストできるようになります。

以上がGo でテキスト ファイルからパイプライン化された HTTP リクエストとレスポンスを解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。