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