C
C
Manually Follow HTTP Redirects
See more HTTP Examples
Demonstrates how to manually follow redirects for an HTTP GET.Chilkat C Downloads
#include <C_CkHttp.h>
#include <C_CkHttpResponse.h>
void ChilkatSample(void)
{
BOOL success;
HCkHttp http;
HCkHttpResponse resp;
int status;
int loopCount;
const char *nextUrl;
success = FALSE;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
http = CkHttp_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:
CkHttp_putFollowRedirects(http,FALSE);
resp = CkHttpResponse_Create();
success = CkHttp_HttpNoBody(http,"GET","http://yandex.ru/",resp);
if (success == FALSE) {
printf("%s\n",CkHttp_lastErrorText(http));
CkHttp_Dispose(http);
CkHttpResponse_Dispose(resp);
return;
}
status = CkHttpResponse_getStatusCode(resp);
printf("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)) {
printf("Redirect URL: %s\n",CkHttp_finalRedirectUrl(http));
nextUrl = CkHttp_finalRedirectUrl(http);
success = CkHttp_HttpNoBody(http,"GET",nextUrl,resp);
if (success == FALSE) {
printf("%s\n",CkHttp_lastErrorText(http));
CkHttp_Dispose(http);
CkHttpResponse_Dispose(resp);
return;
}
status = CkHttpResponse_getStatusCode(resp);
printf("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) {
printf("Too many redirects.\n");
CkHttp_Dispose(http);
CkHttpResponse_Dispose(resp);
return;
}
}
CkHttp_Dispose(http);
CkHttpResponse_Dispose(resp);
}