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) }
추가 참고 사항
위 내용은 Go에서 HTTP 요청과 텍스트 파일의 응답을 어떻게 구문 분석하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!