>백엔드 개발 >Golang >리디렉션을 따르지 않고 Go에서 URL을 어떻게 쿼리할 수 있나요?

리디렉션을 따르지 않고 Go에서 URL을 어떻게 쿼리할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-12-06 02:16:13162검색

How Can I Query URLs in Go Without Following Redirects?

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.