리디렉션을 따르지 않고 Go에서 URL을 쿼리하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-24 20:13:46
원래의
778명이 탐색했습니다.

How to Query URLs in Go without Following Redirects?

Go에서 리디렉션 없이 URL 쿼리

리디렉션 스크립트에 대한 벤치마크 테스트에서는 자동 리디렉션을 시작하지 않고 URL을 쿼리해야 합니다. . 이를 위해서는 프로그램이 리디렉션 URL 또는 관련 오류를 기록하는 동안 리디렉션된 콘텐츠를 다운로드하지 못하도록 방지해야 합니다.

해결책 1: http.DefaultTransport.RoundTrip 사용

한 가지 접근 방식 http.Request 내에서 http.DefaultTransport.RoundTrip() 함수를 활용하는 것입니다. http.Client와 달리 Transport는 자동으로 리디렉션을 따르지 않습니다.

req, err := http.NewRequest("GET", "http://example.com/redirectToAppStore", nil)
// ...
resp, err := http.DefaultTransport.RoundTrip(req)
로그인 후 복사

그러나 이 솔루션은 부하가 높은 시나리오에서 성능 문제 및 오류가 발생할 수 있습니다.

해결책 2: 설정 CheckRedirect를 False로

또는 http.Client의 CheckRedirect 필드를 수정하여 비활성화할 수 있습니다. 자동 리디렉션:

client := &http.Client{
    CheckRedirect: func(req *http.Request, via []*http.Request) error {
        return http.ErrUseLastResponse
    },
}
// ...
resp, err := client.Get("http://example.com/redirectToAppStore")
로그인 후 복사

이 방법은 일관된 성능을 보장하지만 각 쿼리 후 연결 종료를 보장하지는 않습니다.

연결 종료 보장

연결 종료를 시행하려면 각각에 대해 새 HTTP 클라이언트를 생성할 수 있습니다. 요청:

for i := 0; i < n; i++ {
    client := &http.Client{
        CheckRedirect: func(req *http.Request, via []*http.Request) error {
            return http.ErrUseLastResponse
        },
    }
    resp, err := client.Get("http://example.com/redirectToAppStore")
    // ...
}
로그인 후 복사

이 접근 방식을 사용하면 각 쿼리가 새로운 연결을 사용하여 연결 재사용으로 인한 성능 문제를 방지할 수 있습니다.

위 내용은 리디렉션을 따르지 않고 Go에서 URL을 쿼리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿