HTTP 처리 구현에서 양식 인코딩 데이터가 포함된 POST 요청과 같은 특정 요청을 처리하려면 요청 본문 검사가 필수적입니다. . 그러나 req.ParseForm()과 같은 메서드를 사용하여 직접 검사하면 요청 상태가 중단되어 요청을 역방향 프록시로 전달할 때 오류가 발생할 수 있습니다.
이 문제를 해결하려면 떠나지 않고 요청 본문을 엿볼 수 있습니다. 원래 요청 객체의 모든 추적. 이는 역방향 프록시와 같은 후속 소비자의 원래 상태를 유지합니다.
효과적인 접근 방식 중 하나는 요청 본문을 중간 버퍼로 읽어온 다음 해당 버퍼를 사용하여 여러 판독기를 생성하는 것입니다. 아래 코드 조각은 이를 보여줍니다.
// Read the request body into a buffer buf, _ := io.ReadAll(r.Body) // Create two readers from the buffer rdr1 := io.NopCloser(bytes.NewBuffer(buf)) rdr2 := io.NopCloser(bytes.NewBuffer(buf)) // Perform desired operations on the first reader doStuff(rdr1) // Reset the request body with the second reader r.Body = rdr2
이 코드에서 bytes.NewBuffer(buf)는 저장된 버퍼를 래핑하는 판독기를 생성합니다. io.NopCloser는 판독기가 io.ReadCloser 인터페이스를 구현하는 데 필요한 Close() 메서드가 오류를 반환하지 않도록 합니다.
코드 조각은 질문에 제공된 예에서 doStuff()는 요청 본문을 처리하는 함수입니다.
buf, _ := io.ReadAll(r.Body) rdr1 := io.NopCloser(bytes.NewBuffer(buf)) rdr2 := io.NopCloser(bytes.NewBuffer(buf)) doStuff(rdr1) r.Body = rdr2
With 이 수정을 통해 원래 요청 상태에 영향을 주지 않고 요청 본문을 검사할 수 있습니다. 그런 다음 역방향 프록시는 수정되지 않은 본문으로 요청 처리를 진행할 수 있습니다.
위 내용은 요청 상태를 수정하지 않고 HTTP 요청 본문을 검사하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!