Go에서 리디렉션 없이 URL 쿼리
이 기사에서는 Go에서 자동 리디렉션을 실행하지 않고 URL을 쿼리하는 문제를 해결합니다. 이는 종종 벤치마킹 목적으로 필요하거나 리디렉션 URL 또는 오류만 기록해야 하는 경우에 필요합니다.
해결책 1: http.DefaultTransport.RoundTrip 사용
http 생성 .평소처럼 객체를 요청합니다. http.Client에 전달하는 대신 http.DefaultTransport.RoundTrip()을 사용하여 요청합니다. 이는 http.Client에 내장된 리디렉션 처리를 우회합니다.
import "net/http" func QueryURLWithoutRedirect(url string) (*http.Response, error) { req, err := http.NewRequest("GET", url, nil) if err != nil { return nil, err } return http.DefaultTransport.RoundTrip(req) }
해결책 2: CheckRedirect로 리디렉션 비활성화
CheckRedirect 필드가 설정된 http.Client를 생성합니다. 0으로. 이렇게 하면 클라이언트가 리디렉션을 따르지 않도록 구성됩니다.
import "net/http" func QueryURLWithoutRedirect(url string) (*http.Response, error) { client := &http.Client{ CheckRedirect: nil, } return client.Get(url) }
추가 고려 사항
두 솔루션 모두 원하는 기능을 제공하지만 첫 번째 접근 방식에서는 부하가 높을 때 성능 문제가 발생할 수 있습니다. , 조기에 종료된 연결을 재사용할 수 있기 때문입니다.
두 번째 접근 방식을 사용하여 각 쿼리가 새 연결을 열도록 하려면 다음을 수행하세요. 루프의 각 요청에 대해 새 http.Client를 만듭니다. 그러나 Go는 일정 기간이 지나면 유휴 연결을 자동으로 종료하므로 이것이 필요하지 않을 수도 있습니다.
궁극적으로 접근 방식의 선택은 특정 성능 요구 사항과 실제 시나리오에서 원하는 동작에 따라 달라집니다.
위 내용은 리디렉션을 따르지 않고 Go에서 URL을 어떻게 쿼리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!