【问题标题】:How to add a "Authorization=Bearer" header with Indy in Delphi?如何在 Delphi 中使用 Indy 添加“Authorization=Bearer”标头?
【发布时间】:2016-07-09 03:32:41
【问题描述】:

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

POSTMAN 请求(运行良好):

POST /somepath HTTP/1.1
主持人:someurl.com.br
授权:承载 eyJhbGciOiJSUzI1NiJ9.....
内容类型: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);

【问题讨论】:

    标签: http delphi access-token indy bearer-token


    【解决方案1】:

    刚刚发现问题。我在“Authorization”和“Bearer”两个词之间添加了错误的分隔符。

    错误:

    FIdHTTP.Request.CustomHeaders.FoldLines := False;
    FIdHTTP.Request.CustomHeaders.Add('Authorization=Bearer ' + txtToken.Text);
    

    正确:

    FIdHTTP.Request.CustomHeaders.FoldLines := False;
    FIdHTTP.Request.CustomHeaders.Add('Authorization:Bearer ' + txtToken.Text);
    

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

    【讨论】:

    • 您应该改用CustomHeaders.Values[] 属性,那么您根本不必担心分隔符:FIdHTTP.Request.CustomHeaders.Valus['Authorization'] := 'Bearer ' + txtToken.Text;
    • 它也是这样工作的。感谢 Remy 的替代品,感谢您对 Stackoverflow 的所有支持。我在您已经回答的其他问题上学到了很多东西。 =)
    • @RemyLebeau 我仍然收到 http/1.0 500 内部服务器错误
    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 2020-06-10
    • 2019-12-31
    • 1970-01-01
    • 2021-05-03
    • 2017-11-26
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多