Sample code for 30+ languages & platforms
Go

Manually Follow HTTP Redirects

See more HTTP Examples

Demonstrates how to manually follow redirects for an HTTP GET.

Chilkat Go Downloads

Go
    success := false

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    http := chilkat.NewHttp()

    // The FollowRedirects property controls whether redirects
    // are automatically followed.  The default behavior is to
    // automatically follow redirects.

    // Explicitly set FollowRedirects so that redirects are NOT automatically taken:
    http.SetFollowRedirects(false)

    resp := chilkat.NewHttpResponse()
    success = http.HttpNoBody("GET","http://yandex.ru/",resp)
    if success == false {
        fmt.Println(http.LastErrorText())
        http.DisposeHttp()
        resp.DisposeHttpResponse()
        return
    }

    status := resp.StatusCode()
    fmt.Println("HTTP Response Status: ", status)

    // The FinalRedirectUrl property will contain the redirect URL
    // If FollowRedirects was equal to true, then all of the 
    // intermediate redirects (if any) would be followed until
    // there were no more redirects.  However, because 
    // FollowRedirects is not true, FinalRedirectUrl contains
    // the next redirect URL.

    loopCount := 0

    for (status == 302) {

        fmt.Println("Redirect URL: ", http.FinalRedirectUrl())

        nextUrl := http.FinalRedirectUrl()
        success = http.HttpNoBody("GET",nextUrl,resp)
        if success == false {
            fmt.Println(http.LastErrorText())
            http.DisposeHttp()
            resp.DisposeHttpResponse()
            return
        }

        status = resp.StatusCode()
        fmt.Println("HTTP Response Status: ", status)

        // For safety, prevent infinite loops by
        // keeping a loopCount and only allows following a max 
        // of 10 redirects:
        loopCount = loopCount + 1
        if loopCount > 10 {
            fmt.Println("Too many redirects.")
            http.DisposeHttp()
            resp.DisposeHttpResponse()
            return
        }

    }


    http.DisposeHttp()
    resp.DisposeHttpResponse()