Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(SQL Server) Refresh Access Token on 401 Unauthorized and Retry (Service Account)See more Google Cloud Storage ExamplesDemonstrates how to handle an expired access token error, refresh the token, and retry the request. (In this case, the request is to download an object from Google Cloud Storage.)
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls. -- CREATE PROCEDURE ChilkatSample AS BEGIN DECLARE @hr int DECLARE @iTmp0 int -- Important: Do not use nvarchar(max). See the warning about using nvarchar(max). DECLARE @sTmp0 nvarchar(4000) -- This example requires the Chilkat API to have been previously unlocked. -- See Global Unlock Sample for sample code. -- This example uses a previously obtained access token having permission for the -- scope "https://www.googleapis.com/auth/cloud-platform" -- In this example, Get Google Cloud Storage OAuth2 Access Token, -- the service account access token was saved to a text file. This example fetches the access token from the file.. DECLARE @sbToken int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbToken OUT IF @hr <> 0 BEGIN PRINT 'Failed to create ActiveX component' RETURN END DECLARE @success int EXEC sp_OAMethod @sbToken, 'LoadFile', @success OUT, 'qa_data/tokens/googleCloudStorageAccessToken.txt', 'utf-8' IF @success = 0 BEGIN PRINT 'Failed to load access token.' EXEC @hr = sp_OADestroy @sbToken RETURN END DECLARE @http int -- Use "Chilkat_9_5_0.Http" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT EXEC sp_OAMethod @sbToken, 'GetAsString', @sTmp0 OUT EXEC sp_OASetProperty @http, 'AuthToken', @sTmp0 -- Construct a URL to download an object named "starfish.jpg" from the "chilkat-ocean" bucket. EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'bucket_name', 'chilkat-ocean' EXEC sp_OAMethod @http, 'SetUrlVar', @success OUT, 'object_name', 'starfish.jpg' DECLARE @url nvarchar(4000) SELECT @url = 'https://www.googleapis.com/storage/v1/b/{$bucket_name}/o/{$object_name}?alt=media' -- If there is an error response, then we didn't actually download the file data, -- but instead we downloaded an error response.. DECLARE @fileData int -- Use "Chilkat_9_5_0.BinData" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.BinData', @fileData OUT EXEC sp_OAMethod @http, 'DownloadBd', @success OUT, @url, @fileData DECLARE @responseCode int EXEC sp_OAGetProperty @http, 'LastStatus', @responseCode OUT IF (@success = 0) and (@responseCode <> 401) BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbToken EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @fileData RETURN END IF @responseCode = 401 BEGIN PRINT 'Received 401 Unauthorized response. Attempting to refresh the access token...' -- May be that the access token expired. -- Load our JSON key and request a new access token, then retry the original request. DECLARE @fac int -- Use "Chilkat_9_5_0.FileAccess" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.FileAccess', @fac OUT DECLARE @jsonKey nvarchar(4000) EXEC sp_OAMethod @fac, 'ReadEntireTextFile', @jsonKey OUT, 'qa_data/googleApi/ChilkatCloud-13a07a2e8b3f.json', 'utf-8' EXEC sp_OAGetProperty @fac, 'LastMethodSuccess', @iTmp0 OUT IF @iTmp0 <> 1 BEGIN EXEC sp_OAGetProperty @fac, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbToken EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @fileData EXEC @hr = sp_OADestroy @fac RETURN END DECLARE @gAuth int -- Use "Chilkat_9_5_0.AuthGoogle" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.AuthGoogle', @gAuth OUT EXEC sp_OASetProperty @gAuth, 'JsonKey', @jsonKey EXEC sp_OASetProperty @gAuth, 'Scope', 'https://www.googleapis.com/auth/cloud-platform' EXEC sp_OASetProperty @gAuth, 'ExpireNumSeconds', 3600 EXEC sp_OASetProperty @gAuth, 'SubEmailAddress', '' DECLARE @tlsSock int -- Use "Chilkat_9_5_0.Socket" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.Socket', @tlsSock OUT EXEC sp_OAMethod @tlsSock, 'Connect', @success OUT, 'www.googleapis.com', 443, 1, 5000 IF @success <> 1 BEGIN EXEC sp_OAGetProperty @tlsSock, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbToken EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @fileData EXEC @hr = sp_OADestroy @fac EXEC @hr = sp_OADestroy @gAuth EXEC @hr = sp_OADestroy @tlsSock RETURN END EXEC sp_OAMethod @gAuth, 'ObtainAccessToken', @success OUT, @tlsSock IF @success <> 1 BEGIN EXEC sp_OAGetProperty @gAuth, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbToken EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @fileData EXEC @hr = sp_OADestroy @fac EXEC @hr = sp_OADestroy @gAuth EXEC @hr = sp_OADestroy @tlsSock RETURN END EXEC sp_OAGetProperty @gAuth, 'AccessToken', @sTmp0 OUT EXEC sp_OAMethod @fac, 'WriteEntireTextFile', @success OUT, 'qa_data/tokens/googleCloudStorageAccessToken.txt', @sTmp0, 'utf-8', 0 -- Retry the original request. EXEC sp_OAGetProperty @gAuth, 'AccessToken', @sTmp0 OUT EXEC sp_OASetProperty @http, 'AuthToken', @sTmp0 EXEC sp_OAMethod @http, 'DownloadBd', @success OUT, @url, @fileData IF @success = 0 BEGIN EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbToken EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @fileData EXEC @hr = sp_OADestroy @fac EXEC @hr = sp_OADestroy @gAuth EXEC @hr = sp_OADestroy @tlsSock RETURN END END IF @responseCode <> 200 BEGIN -- Get the error response DECLARE @sbErrorResponse int -- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbErrorResponse OUT EXEC sp_OAMethod @sbErrorResponse, 'AppendBd', @success OUT, @fileData, 'utf-8', 0, 0 PRINT 'Error response code = ' + @responseCode PRINT 'Error:' EXEC sp_OAMethod @sbErrorResponse, 'GetAsString', @sTmp0 OUT PRINT @sTmp0 EXEC @hr = sp_OADestroy @sbToken EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @fileData EXEC @hr = sp_OADestroy @fac EXEC @hr = sp_OADestroy @gAuth EXEC @hr = sp_OADestroy @tlsSock EXEC @hr = sp_OADestroy @sbErrorResponse RETURN END PRINT 'Success.' -- Save the downloaded data to a file. EXEC sp_OAMethod @fileData, 'WriteFile', @success OUT, 'qa_output/starfish.jpg' EXEC @hr = sp_OADestroy @sbToken EXEC @hr = sp_OADestroy @http EXEC @hr = sp_OADestroy @fileData EXEC @hr = sp_OADestroy @fac EXEC @hr = sp_OADestroy @gAuth EXEC @hr = sp_OADestroy @tlsSock EXEC @hr = sp_OADestroy @sbErrorResponse END GO |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.