>백엔드 개발 >Golang >Go에서 HTTP 리디렉션 후 최종 URL을 얻는 방법은 무엇입니까?

Go에서 HTTP 리디렉션 후 최종 URL을 얻는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-18 07:45:03236검색

How to Get the Final URL After HTTP Redirection in Go?

HTTP 요청에서 리디렉션 후 최종 URL 검색

http.NewRequest를 활용하여 HTTP 요청을 시작할 때 다음을 추출해야 할 수 있습니다. 클라이언트에서 리디렉션이 발생하는 경우에도 최종 URL에서 문자열을 쿼리합니다. 그러나 응답 객체에서는 이 정보를 쉽게 찾을 수 없을 수도 있습니다.

해결책:

최종 URL을 얻는 한 가지 접근 방식은 CheckRedirect 내에서 익명 기능을 사용하는 것입니다. http.Client 구조체의 필드입니다. 이 익명 함수는 요청의 URL을 캡처하기 위해 각 리디렉션 전에 실행되는 콜백 역할을 합니다.

예:

import (
    "errors"
    "fmt"
    "io"
    "log"
    "net/http"
)

func main() {
    req, err := http.NewRequest("GET", "https://example.com/path", nil)
    if err != nil {
        log.Fatal(err)
    }

    cl := http.Client{}
    var lastUrlQuery string

    // Custom CheckRedirect function to capture the final URL before each redirect
    cl.CheckRedirect = func(req *http.Request, via []*http.Request) error {
        if len(via) > 10 {
            return errors.New("too many redirects")
        }
        lastUrlQuery = req.URL.RequestURI()
        return nil
    }

    resp, err := cl.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    // Use the lastUrlQuery variable to access the final URL after any redirects
    fmt.Printf("Last URL Query: %s\n", lastUrlQuery)

    // Read the response body for further processing
    io.Copy(io.Discard, resp.Body)
}

이 스크립트에서는 익명 함수가 CheckRedirect에 할당됩니다. http.Client의 필드입니다. 이 익명 함수는 각 리디렉션이 발생하기 전에 lastUrlQuery 변수를 요청의 URL로 설정합니다. 결과적으로 리디렉션이 발생한 후 요청의 최종 URL을 검색할 수 있습니다.

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

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