Sample code for 30+ languages & platforms
SQL Server

Manually Follow HTTP Redirects

See more HTTP Examples

Demonstrates how to manually follow redirects for an HTTP GET.

Chilkat SQL Server Downloads

SQL Server
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    -- Important: Do not use nvarchar(max).  See the warning about using nvarchar(max).
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

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

    DECLARE @http int
    EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    -- 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:
    EXEC sp_OASetProperty @http, 'FollowRedirects', 0

    DECLARE @resp int
    EXEC @hr = sp_OACreate 'Chilkat.HttpResponse', @resp OUT

    EXEC sp_OAMethod @http, 'HttpNoBody', @success OUT, 'GET', 'http://yandex.ru/', @resp
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @http
        EXEC @hr = sp_OADestroy @resp
        RETURN
      END

    DECLARE @status int
    EXEC sp_OAGetProperty @resp, 'StatusCode', @status OUT

    PRINT 'HTTP Response Status: ' + @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.

    DECLARE @loopCount int
    SELECT @loopCount = 0

    WHILE (@status = 302)
      BEGIN


        EXEC sp_OAGetProperty @http, 'FinalRedirectUrl', @sTmp0 OUT
        PRINT 'Redirect URL: ' + @sTmp0

        DECLARE @nextUrl nvarchar(4000)
        EXEC sp_OAGetProperty @http, 'FinalRedirectUrl', @nextUrl OUT
        EXEC sp_OAMethod @http, 'HttpNoBody', @success OUT, 'GET', @nextUrl, @resp
        IF @success = 0
          BEGIN
            EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
            PRINT @sTmp0
            EXEC @hr = sp_OADestroy @http
            EXEC @hr = sp_OADestroy @resp
            RETURN
          END

        EXEC sp_OAGetProperty @resp, 'StatusCode', @status OUT

        PRINT 'HTTP Response Status: ' + @status

        -- For safety, prevent infinite loops by
        -- keeping a loopCount and only allows following a max 
        -- of 10 redirects:
        SELECT @loopCount = @loopCount + 1
        IF @loopCount > 10
          BEGIN

            PRINT 'Too many redirects.'
            EXEC @hr = sp_OADestroy @http
            EXEC @hr = sp_OADestroy @resp
            RETURN
          END

      END

    EXEC @hr = sp_OADestroy @http
    EXEC @hr = sp_OADestroy @resp


END
GO