일반적인 시나리오에서는 텍스트 파일에 저장된 HTTP 요청 및 응답 파이프라인을 접하게 됩니다. 분석이나 추가 처리를 위해 이러한 파이프라인 메시지를 구조화된 형식으로 구문 분석해야 할 때 문제가 발생합니다. 이 글은 Go에서 HTTP 요청과 이러한 텍스트 파일의 응답을 모두 구문 분석하는 단계를 안내합니다.
Go 표준 라이브러리는 http.ReadRequest라는 편리한 기능을 제공합니다. 이는 HTTP 요청 구문 분석을 단순화합니다. *bufio.Reader에서 요청 라인, 헤더 및 본문(Content-Length 헤더로 지정된 경우)을 읽습니다.
req, err := http.ReadRequest(buf) if err != nil { return err }
http.ReadResponse 함수는 다음을 수행합니다. HTTP 응답에 대한 유사한 작업입니다. *bufio.Reader에서 상태 줄, 헤더 및 본문을 읽습니다.
resp, err := http.ReadResponse(buf, req) if err != nil { return err }
http.ReadResponse 함수는 응답 본문을 반환할 때 자동으로 닫습니다. 나중에 사용하기 위해 본문을 보존하려면 수동으로 다른 버퍼에 복사해야 합니다.
b := new(bytes.Buffer) io.Copy(b, resp.Body) resp.Body.Close() resp.Body = ioutil.NopCloser(b)
파일에서 HTTP 파이프라인을 구문 분석하려면 bufio 패키지를 사용합니다. 파일을 한 줄씩 읽고 구문 분석된 요청과 응답을 저장할 연결 구조체 조각을 만듭니다.
stream := make([]Connection, 0) for { req, err := http.ReadRequest(buf) if err == io.EOF { break } resp, err := http.ReadResponse(buf, req) if err != nil { return err } ... stream = append(stream, Connection{Request: req, Response: resp}) }
확인 목적으로 httputil.DumpRequest 및 httputil.DumpResponse를 사용하여 구문 분석된 요청과 응답을 문자열로 덤프하여 검사할 수 있습니다.
b, err := httputil.DumpRequest(c.Request, true) if err != nil { log.Fatal(err) } fmt.Println(string(b)) b, err = httputil.DumpResponse(c.Response, true) if err != nil { log.Fatal(err) } fmt.Println(string(b))
By 신중한 본문 처리와 함께 http.ReadRequest 및 http.ReadResponse 함수를 활용하여 Go에서 HTTP 파이프라인 요청과 텍스트 파일의 응답을 효과적으로 구문 분석할 수 있습니다. 이러한 접근 방식을 통해 우리는 편리하고 안정적인 방식으로 HTTP 통신 시나리오를 분석, 처리 또는 테스트할 수 있습니다.
위 내용은 Go에서 파이프라인 HTTP 요청과 텍스트 파일의 응답을 어떻게 구문 분석하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!