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

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

Linda Hamilton
풀어 주다: 2024-12-06 02:16:13
원래의
154명이 탐색했습니다.

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

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