如何在 Delphi 中使用 Indy 添加“Authorization=Bearer”标头?

use*_*902 3 delphi http indy access-token bearer-token

我正在尝试使用 access_token 执行 POST 请求,并且使用 POSTMAN 可以正常工作,但是当我尝试在 Delphi 上执行相同的请求时,我找不到添加“Authorization=Bearer eyxxxxxx ... " 到请求标头,就像 POSTMAN 一样。

邮递员请求(运行良好):

POST /somepath HTTP/1.1
Host: someurl.com.br
Authorization: Bearer eyJhbGciOiJSUzI1NiJ9.....
Content-Type: application/json

(省略正文内容)

Delphi 生成的 Indy 请求,被 HTTP Analyzer 捕获(总是返回 401 Forbidden 错误,因为没有“Authorization=Bearer”部分):

POST /somepath HTTP/1.1
主机:someurl.com.br
内容类型:application/json

(省略正文内容)

我尝试使用下面的代码添加标头,但在请求时未生成带有“Authorization=Bearer eyxxxxxx...”的标头部分,返回 401 Forbidden 错误。

FIdHTTP.Request.CustomHeaders.FoldLines := False;
FIdHTTP.Request.CustomHeaders.Add('Authorization=Bearer ' + txtToken.Text);
Run Code Online (Sandbox Code Playgroud)

use*_*902 8

刚刚发现问题。我在“授权”和“持票人”字样之间添加了错误的分隔符。

错误的:

FIdHTTP.Request.CustomHeaders.FoldLines := False;
FIdHTTP.Request.CustomHeaders.Add('Authorization=Bearer ' + txtToken.Text);
Run Code Online (Sandbox Code Playgroud)

正确的:

FIdHTTP.Request.CustomHeaders.FoldLines := False;
FIdHTTP.Request.CustomHeaders.Add('Authorization:Bearer ' + txtToken.Text);
Run Code Online (Sandbox Code Playgroud)

将 '=' 替换为 ':' 后,我收到了预期的响应,就像 POSTMAN 收到的响应一样。

  • 您应该改用`CustomHeaders.Values[]` 属性,那么您根本不必担心分隔符:`FIdHTTP.Request.CustomHeaders.Valus['Authorization'] := 'Bearer' + txtToken.Text ;` (10认同)