Sample code for 30+ languages & platforms
PureBasic

Manually Follow HTTP Redirects

See more HTTP Examples

Demonstrates how to manually follow redirects for an HTTP GET.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"

Procedure ChilkatExample()

    success.i = 0

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

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; 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:
    CkHttp::setCkFollowRedirects(http, 0)

    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpNoBody(http,"GET","http://yandex.ru/",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    status.i = CkHttpResponse::ckStatusCode(resp)
    Debug "HTTP Response Status: " + Str(status)

    ; 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.

    loopCount.i = 0

    While (status = 302)

        Debug "Redirect URL: " + CkHttp::ckFinalRedirectUrl(http)

        nextUrl.s = CkHttp::ckFinalRedirectUrl(http)
        success = CkHttp::ckHttpNoBody(http,"GET",nextUrl,resp)
        If success = 0
            Debug CkHttp::ckLastErrorText(http)
            CkHttp::ckDispose(http)
            CkHttpResponse::ckDispose(resp)
            ProcedureReturn
        EndIf

        status = CkHttpResponse::ckStatusCode(resp)
        Debug "HTTP Response Status: " + Str(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
            Debug "Too many redirects."
            CkHttp::ckDispose(http)
            CkHttpResponse::ckDispose(resp)
            ProcedureReturn
        EndIf

    Wend


    CkHttp::ckDispose(http)
    CkHttpResponse::ckDispose(resp)


    ProcedureReturn
EndProcedure