Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Menghuraikan Permintaan dan Respons HTTP daripada Fail Teks dalam Go?

Bagaimanakah Saya Boleh Menghuraikan Permintaan dan Respons HTTP daripada Fail Teks dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-03 04:35:39843semak imbas

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

Menghuraikan Permintaan dan Respons HTTP daripada Fail Teks dalam Go

Dalam Go, menghuraikan permintaan HTTP dan respons daripada fail teks melibatkan memanfaatkan yang terbina -dalam fungsi penghuraian HTTP. Untuk mencapai matlamat ini, seseorang boleh menggunakan pendekatan berikut:

func ReadHTTPFromFile(r io.Reader) ([]Connection, error) {
    // Establish a new buffered reader to process the input.
    buf := bufio.NewReader(r)

    // Define a slice that will store HTTP connection information.
    stream := make([]Connection, 0)

    // Loop indefinitely to parse request and response pairs until we reach the end of the file.
    for {
        // Attempt to parse an HTTP request using ReadRequest.
        req, err := http.ReadRequest(buf)

        // Check if we have reached the end of the file or an error occurred.
        if err == io.EOF {
            // Break out of the loop since we have reached the end of the file.
            break
        } else if err != nil {
            // Log the error and return the partially parsed stream.
            log.Println("Error parsing HTTP request:", err)
            return stream, err
        }

        // Now that we have a request, we need to parse the corresponding HTTP response.
        resp, err := http.ReadResponse(buf, req)

        // Check for any errors while parsing the response.
        if err != nil {
            // Log the error and return the partially parsed stream.
            log.Println("Error parsing HTTP response:", err)
            return stream, err
        }

        // Copy the response body to a new buffer to preserve it.
        var b bytes.Buffer
        io.Copy(&b, resp.Body)

        // Close the original response body and replace it with a new, non-closing one.
        resp.Body.Close()
        resp.Body = ioutil.NopCloser(&b)

        // Add the connection to our stream.
        stream = append(stream, Connection{Request: req, Response: resp})
    }

    // Return the parsed stream.
    return stream, nil
}

Dengan fungsi ini, anda boleh membuka fail yang mengandungi permintaan dan respons HTTP dan menghuraikannya. Contohnya:

func main() {
    // Open a file for reading.
    file, err := os.Open("http.txt")
    if err != nil {
        log.Fatal(err)
    }

    // Parse the HTTP requests and responses from the file.
    stream, err := ReadHTTPFromFile(file)
    if err != nil {
        log.Fatal(err)
    }

    // Dump a representation of the parsed requests and responses for inspection.
    for _, c := range stream {
        reqDump, err := httputil.DumpRequest(c.Request, true)
        if err != nil {
            log.Fatal(err)
        }
        respDump, err := httputil.DumpResponse(c.Response, true)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(string(reqDump))
        fmt.Println(string(respDump))
    }
}

Kod ini akan membaca kandungan fail "http.txt", menghuraikan permintaan dan respons HTTP dan membuang representasinya untuk pemeriksaan. Fungsi penghuraian HTTP yang disediakan oleh pustaka standard Go membolehkan anda mengekstrak dan memanipulasi permintaan dan respons daripada aliran fail teks.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan Permintaan dan Respons HTTP daripada Fail Teks dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn