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