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

5

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

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
Host: someurl.com.br
Content-Type: application/json

(省略了正文内容)

我已经尝试使用下面的代码添加头部,但是带有"Authorization=Bearer eyxxxxxx..."的头部部分没有生成在请求中,返回401 Forbidden错误。

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

13

刚刚发现问题所在。我在“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收到的响应一样。


14
你应该使用CustomHeaders.Values[]属性,这样你就不用担心分隔符了:FIdHTTP.Request.CustomHeaders.Valus['Authorization'] := 'Bearer ' + txtToken.Text; - Remy Lebeau
1
它也能这样运作。谢谢你的备选方案,Remy,并感谢你在Stackoverflow上所有的支持。我已经从你回答的其他问题中学到了很多。=) - user3024902
@RemyLebeau 我仍然收到了 http/1.0 500 内部服务器错误。 - FZS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接