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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-14 16:55:12974ブラウズ

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

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

はじめに
この質問は解析に焦点を当てていますConnection 構造体の Go スライスへの HTTP リクエストとレスポンスのストリームを含むテキスト ファイル。各 Connection 構造体には、HTTP リクエストとレスポンスが含まれています。

問題の概要
HTTP リクエストとレスポンスを含むテキスト ファイルが与えられた場合、タスクはそれを []Connection スライスに解析することです。 http.ReadRequest 関数を使用してリクエストを解析できます。ただし、応答を解析する組み込み関数はありません。

実装
この解決策には次の手順が含まれます:

  1. バッファード リーダーの作成:

    buf := bufio.NewReader(r)

    ここでr は、テキスト ファイルを表す io.Reader インスタンスです。

  2. 反復解析:

    for {
        req, err := http.ReadRequest(buf)

    a. http.ReadRequest を使用して、次のリクエストを解析します。 stream.

    b. EOF を確認します (err == io.EOF)。到達した場合、ループから抜け出します。

    c. エラーが発生した場合は、エラーを含む解析されたストリームを返します。

  3. 応答解析:

     resp, err := http.ReadResponse(buf, req)
    • を使用http.ReadResponse は、リクエストに関連付けられたレスポンスを解析します。
  4. レスポンスボディの処理:

     b := new(bytes.Buffer)
     io.Copy(b, resp.Body)
     resp.Body.Close()
     resp.Body = ioutil.NopCloser(b)
    • 保存応答本文をバイト バッファーにコピーします (b)。
    • 元の応答本文を閉じます(resp.Body).
    • resp.Body をバイト バッファーに置き換えます。
  5. ストリーム人口:

    stream = append(stream, Connection{Request: req, Response: resp})
    • Connection 構造体を作成し、ストリームに追加しますlice.
  6. ループ終了:

    if err == io.EOF {
        break
    }
    • http.ReadRequest が返されたときにループを終了します。 EOF.
  7. 使用例:

    f, err := os.Open("/tmp/test.http")
    stream, err := ReadHTTPFromFile(f)
    • テキスト ファイルを開き、ReadHTTPFromFile に渡します。 function.

結論
このメソッドは、テキスト ファイルからの HTTP リクエストと応答を効果的に解析し、解析されたデータを []Connection スライスに設定します。 。応答本文を正しく処理し、パイプライン ストリーム内の複数の要求と応答を正しく解析できるようにします。

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

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