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

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

Patricia Arquette
リリース: 2025-01-04 07:00:35
オリジナル
311 人が閲覧しました

How to Parse HTTP Requests and Responses from Text Files in Go?

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)
}
ログイン後にコピー

補足

  • http.ReadRequest http.ReadResponse は、ファイルの終わりに達するまで、同じバッファリングされたリーダー上で繰り返し呼び出すことができます。
  • との互換性を確保するため入力ファイルに、正確な値を含む Content-Length ヘッダーが含まれていることを確認してください。
  • 入力ファイルに、上記の例のように切り捨てられた応答が含まれている場合は、より包括的な応答を保証するために httputil.DumpResponse の使用を検討することをお勧めします。応答内容の表現。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート