You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi TRESTRequest调用Freshdesk API授权失败求助

Delphi 11 TRESTRequest Freshdesk API 授权失败(Postman可正常工作)

你遇到的invalid_credentials错误通常是因为Delphi请求中的Basic Auth格式不符合Freshdesk要求,或者请求头设置有误。以下是具体的排查和修复方案:

核心原因分析

Freshdesk的Basic Auth要求是:将API密钥后跟冒号(API_KEY:)进行Base64编码,而非单纯编码API密钥。Postman在输入API密钥作为用户名、空密码时,会自动帮你添加冒号并完成编码,这是Delphi和Postman请求的关键差异点。

另外,你的代码中给Authorization头设置了ContentType := ctAPPLICATION_JSON,这是错误的——该属性仅用于请求体参数,HTTP头不需要此设置,可能导致头信息解析异常。

修复步骤

1. 重新生成正确的Base64编码字符串

将你的API密钥末尾添加冒号(例如your_api_key:),然后对这个完整字符串进行Base64编码。比如:

  • 原始内容:my_freshdesk_api_key:
  • Base64编码后:bXlfZnJlc2hkc2tfYXBpX2tleTo=

2. 修正Delphi代码

移除Authorization头的ContentType设置,并确保请求头格式正确:

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;
  
  // 添加正确的Authorization头
  with RESTRequest1.Params.AddItem do
  begin
    Name := 'Authorization';
    // 确保edtApiKey的内容是`API_KEY:`的Base64编码,可加Trim避免多余空格
    Value := 'Basic ' + Trim(edtApiKey.Text);
    Kind := pkHTTPHEADER;
  end;

  // 添加Accept头,明确要求JSON响应(可选但推荐)
  with RESTRequest1.Params.AddItem do
  begin
    Name := 'Accept';
    Value := 'application/json';
    Kind := pkHTTPHEADER;
  end;

  try
    RESTRequest1.Execute;
    // 此处可添加响应处理逻辑,例如解析RESTResponse1的内容
  except
    on E: Exception do
      ShowMessage('请求失败: ' + E.Message);
  end;
end;

额外排查建议

  • 抓包对比请求头:用Fiddler等工具捕获Delphi和Postman发送的请求,对比Authorization头是否完全一致,确认没有多余字符或格式差异。
  • 验证编码有效性:将生成的Base64字符串解码,检查是否还原为API_KEY:的格式,确保编码过程无错误。
  • 检查输入框内容:确保edtApiKey中没有意外的换行、空格或制表符,可在代码中用Trim()处理输入内容。

内容的提问来源于stack exchange,提问作者Mark Lyder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:22:27