>백엔드 개발 >Golang >Go에서 HTTP 요청과 텍스트 파일의 응답을 어떻게 구문 분석하나요?

Go에서 HTTP 요청과 텍스트 파일의 응답을 어떻게 구문 분석하나요?

Patricia Arquette
Patricia Arquette원래의
2025-01-04 07:00:35307검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.