Sample code for 30+ languages & platforms
Xbase++

Manually Follow HTTP Redirects

See more HTTP Examples

Demonstrates how to manually follow redirects for an HTTP GET.

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oHttp
LOCAL oResp
LOCAL nStatus
LOCAL nLoopCount
LOCAL cNextUrl

nSuccess := 0

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

oHttp := CreateObject("Chilkat.Http")

//  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:
oHttp:FollowRedirects := 0

oResp := CreateObject("Chilkat.HttpResponse")
nSuccess := oHttp:HttpNoBody("GET", "http://yandex.ru/", oResp)
IF (nSuccess == 0)
    ? oHttp:LastErrorText
    oHttp:destroy()
    oResp:destroy()
    RETURN
ENDIF

nStatus := oResp:StatusCode
? "HTTP Response Status: " + Str(nStatus)

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

nLoopCount := 0

DO WHILE (nStatus == 302)

    ? "Redirect URL: " + oHttp:FinalRedirectUrl

    cNextUrl := oHttp:FinalRedirectUrl
    nSuccess := oHttp:HttpNoBody("GET", cNextUrl, oResp)
    IF (nSuccess == 0)
        ? oHttp:LastErrorText
        oHttp:destroy()
        oResp:destroy()
        RETURN
    ENDIF

    nStatus := oResp:StatusCode
    ? "HTTP Response Status: " + Str(nStatus)

    //  For safety, prevent infinite loops by
    //  keeping a loopCount and only allows following a max 
    //  of 10 redirects:
    nLoopCount := nLoopCount + 1
    IF (nLoopCount > 10)
        ? "Too many redirects."
        oHttp:destroy()
        oResp:destroy()
        RETURN
    ENDIF

ENDDO

oHttp:destroy()
oResp:destroy()