Delphi RESTRequest -无法获得授权?

webghufk  于 2023-05-06  发布在  其他
关注(0)|答案(2)|浏览(190)

我想使用TRESTRequest组件从Freshdesk页面获取信息,但无法获得授权。但是,当我使用Postman发送请求时,我能够获得授权。
我已经尝试了我能在论坛上找到的所有解决方案,但我一再得到一个错误...

{
    "code": "invalid_credentials",
    "message": "You have to be logged in to perform this action."
}

这就是我使用 Delphi 11创建请求的内容。

procedure TForm1.Button2Click(Sender: TObject);
begin
  RESTClient1.BaseURL := 'https://bentley.freshdesk.com/api/v2/';

  RESTRequest1.Method := TRESTRequestMethod.rmGET;
  RESTRequest1.Resource := 'solutions/categories';

  RESTRequest1.Params.Clear;
  with RESTRequest1.Params.AddItem do
    begin
        ContentType := ctAPPLICATION_JSON;
        name        := 'Authorization';
        Value       := 'Basic ' + edtApiKey ;
        Kind        :=  pkHTTPHEADER;
    end;

  RESTRequest1.Execute;
end;
  • edtApiKey* 是一个编辑框,其中键入了已经Base64编码的API密钥。

问题是,我可以将完全相同的信息(URI和授权头)放入Postman,请求按预期返回完全授权...?
Postman 发送的信息和 Delphi 发送的信息在语法上肯定有些不同,但是我,无论如何,也弄不明白。

wfauudbj

wfauudbj1#

您需要将poDoNotEncode选项添加到参数中:

with RESTRequest1.Params.AddItem do
    begin
        ContentType := ctAPPLICATION_JSON;
        name        := 'Authorization';
        Value       := 'Basic ' + edtApiKey ;
        Kind        :=  pkHTTPHEADER;
        Option      := [doNotEncode];
    end;
unhi4e5o

unhi4e5o2#

看起来你需要提供一个假密码。文档使用X,因此在Base64编码之前将:X添加到API密钥中,但显然任何密码都可以。
FRESHDESK API参考除外:认证
您可以使用个人API密钥对请求进行身份验证。如果使用API密钥,则不需要密码。您可以使用任何字符集作为虚拟密码。
注意:如果您确信您的凭据是正确的,但仍然无法访问您的帮助台,请确保“APIkey:X”是Base64编码的,然后将其作为“Authorization”头传递。

相关问题