我需要在 FireMonkey 中实现 REST API 来获取一些信息,但我不确定如何做到这一点。
REST API使用OAuth2,我可以访问两个代码:Consumer Key和Consumer Secret。之后,我需要获得一个临时的 Bearer 令牌。
要请求临时令牌,需要向令牌端点https://apigateway.serpro.gov.br/tokenAuthorization执行 HTTP POST 请求,以 Base64 格式在HTTP 标头中告知访问凭证(consumerKey:consumerSecret)
, 如下所示。
[POST] grant_type = client_credentials
[HEAD] Authorization: Basic Base64 (Consumer key: ConsumerSecret)
Run Code Online (Sandbox Code Playgroud)
如何使用 Delphi 获取访问令牌?
我需要获取包含以下 JSONsubitem1的 a 的值:LResponse
"Information": {
"subitem1": "2011",
"subitem2": "Test"
}
Run Code Online (Sandbox Code Playgroud)
我正在使用此代码来获取其他值,它运行良好,但是当我尝试获取Information, subitem1or时subitem2,它返回一个空值。
var
LClient: TRESTClient;
LRequest: TRESTRequest;
LResponse: TRESTResponse;
begin
LClient := TRESTClient.Create(URL_API);
try
LRequest := TRESTRequest.Create(LClient);
try
LResponse := TRESTResponse.Create(LClient);
try
LRequest.Client := LClient;
LRequest.Response := LResponse;
LRequest.Method := rmGET;
LRequest.Params.AddHeader('Authorization','Bearer '+FToken);
LRequest.Params.ParameterByName('Authorization').Options := [poDoNotEncode];
LRequest.Params.AddHeader('Accept', 'application/json');
LRequest.Execute;
LResponse.GetSimpleValue('subitem1', FLogradouro);
{ ... }
Run Code Online (Sandbox Code Playgroud)