Sample code for 30+ languages & platforms
Unicode C

Manually Follow HTTP Redirects

See more HTTP Examples

Demonstrates how to manually follow redirects for an HTTP GET.

Chilkat Unicode C Downloads

Unicode C
#include <C_CkHttpW.h>
#include <C_CkHttpResponseW.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkHttpW http;
    HCkHttpResponseW resp;
    int status;
    int loopCount;
    const wchar_t *nextUrl;

    success = FALSE;

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

    http = CkHttpW_Create();

    // 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:
    CkHttpW_putFollowRedirects(http,FALSE);

    resp = CkHttpResponseW_Create();
    success = CkHttpW_HttpNoBody(http,L"GET",L"http://yandex.ru/",resp);
    if (success == FALSE) {
        wprintf(L"%s\n",CkHttpW_lastErrorText(http));
        CkHttpW_Dispose(http);
        CkHttpResponseW_Dispose(resp);
        return;
    }

    status = CkHttpResponseW_getStatusCode(resp);
    wprintf(L"HTTP Response Status: %d\n",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;

    while ((status == 302)) {

        wprintf(L"Redirect URL: %s\n",CkHttpW_finalRedirectUrl(http));

        nextUrl = CkHttpW_finalRedirectUrl(http);
        success = CkHttpW_HttpNoBody(http,L"GET",nextUrl,resp);
        if (success == FALSE) {
            wprintf(L"%s\n",CkHttpW_lastErrorText(http));
            CkHttpW_Dispose(http);
            CkHttpResponseW_Dispose(resp);
            return;
        }

        status = CkHttpResponseW_getStatusCode(resp);
        wprintf(L"HTTP Response Status: %d\n",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) {
            wprintf(L"Too many redirects.\n");
            CkHttpW_Dispose(http);
            CkHttpResponseW_Dispose(resp);
            return;
        }

    }



    CkHttpW_Dispose(http);
    CkHttpResponseW_Dispose(resp);

    }