![]() |
Chilkat • HOME • Android™ • AutoIt • C • C# • C++ • Chilkat2-Python • CkPython • Classic ASP • DataFlex • Delphi DLL • Go • Java • Node.js • Objective-C • PHP Extension • Perl • PowerBuilder • PowerShell • PureBasic • Ruby • SQL Server • Swift • Tcl • Unicode C • Unicode C++ • VB.NET • VBScript • Visual Basic 6.0 • Visual FoxPro • Xojo Plugin
(Perl) Automatically Refresh Token for 401 UnauthorizedDemonstrates how to automatically refresh an access token (without user interaction) when the token expires and a 401 Unauthorized response is received.
use chilkat(); # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. $tokenFilePath = "qa_data/tokens/googleCalendar.json"; # Get our current access token. $jsonToken = chilkat::CkJsonObject->new(); $success = $jsonToken->LoadFile($tokenFilePath); if ($jsonToken->HasMember("access_token") == 0) { print "No access token found." . "\r\n"; exit; } $http = chilkat::CkHttp->new(); $http->put_AuthToken($jsonToken->stringOf("access_token")); $jsonResponse = $http->quickGetStr("https://www.googleapis.com/calendar/v3/users/me/calendarList"); if ($http->get_LastMethodSuccess() != 1) { if ($http->get_LastStatus() != 401) { print $http->lastErrorText() . "\r\n"; print "----" . "\r\n"; print $http->lastResponseBody() . "\r\n"; exit; } # The access token must've expired. # Refresh the access token and then retry the request. $oauth2 = chilkat::CkOAuth2->new(); $oauth2->put_TokenEndpoint("https://www.googleapis.com/oauth2/v4/token"); # Replace these with actual values. $oauth2->put_ClientId("GOOGLE-CLIENT-ID"); $oauth2->put_ClientSecret("GOOGLE-CLIENT-SECRET"); # Get the "refresh_token" $oauth2->put_RefreshToken($jsonToken->stringOf("refresh_token")); # Send the HTTP POST to refresh the access token.. $success = $oauth2->RefreshAccessToken(); if ($success != 1) { print $oauth2->lastErrorText() . "\r\n"; exit; } # The response contains a new access token, but we must keep # our existing refresh token for when we need to refresh again in the future. $jsonToken->UpdateString("access_token",$oauth2->accessToken()); # Save the new JSON access token response to a file. $sbJson = chilkat::CkStringBuilder->new(); $jsonToken->put_EmitCompact(0); $jsonToken->EmitSb($sbJson); $sbJson->WriteFile($tokenFilePath,"utf-8",0); print "OAuth2 authorization granted!" . "\r\n"; print "New Access Token = " . $oauth2->accessToken() . "\r\n"; # re-try the original request. $http->put_AuthToken($oauth2->accessToken()); $jsonResponse = $http->quickGetStr("https://www.googleapis.com/calendar/v3/users/me/calendarList"); if ($http->get_LastMethodSuccess() != 1) { print $http->lastErrorText() . "\r\n"; exit; } } print $jsonResponse . "\r\n"; print "-----------------------------" . "\r\n"; |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.