【发布时间】:2020-05-29 11:48:12
【问题描述】:
我正在努力使用 Delphi 10.2.2 和 Indy 10 从 Google Securetoken 获得响应。
我之前从https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=XXX 获得了我的 RefreshToken。这很好用。
现在我尝试使用https://securetoken.googleapis.com/v1/token 刷新令牌,但不起作用。我总是收到403 Forbidden 错误。
procedure TForm1.Button2Click(Sender: TObject);
var
l_Response: string;
l_PostData: TIdMultiPartFormDataStream;
l_IRESAccessToken: TIRESAccessToken;
begin
IdHTTP2.Request.ContentType := 'application/json';
IdHTTP2.Request.CharSet := 'utf-8';
l_PostData := TIdMultiPartFormDataStream.Create;
try
l_PostData.AddFormField('grant_type', 'refresh_token');
l_PostData.AddFormField('refresh_token', m_IRESAuth.RefreshToken);
l_PostData.AddFormField('key', 'XXX');
try
l_Response := IdHTTP2.Post('https://securetoken.googleapis.com/v1/token', l_PostData);
l_IRESAccessToken := TJson.JsonToObject<TIRESAccessToken>(l_Response);
except
on E: Exception do
ShowMessage('Error on request: '#13#10 + e.Message);
end;
finally
l_PostData.Free;
end;
end;
我尝试了指定 TLS 1.2 的 IOHandler,并尝试使用 JSON 对象发送帖子。另外,我在TIdHTTP.HTTPOptions 中设置了hoKeepOrigProtocol 标志。到目前为止没有任何效果,我总是得到403 Forbidden。
我用另一个程序试过了,没有问题。
我错过了什么吗?
【问题讨论】:
-
你为什么使用
TIdMultiPartFormDataStream? -
我尝试使用 TStringList、JSON 和 TIdMultiPartFormDataStream 作为参数。总是遇到同样的 403 错误