【问题标题】:Adding custom header to TIdHttp request, header value has commas为 TIdHttp 请求添加自定义标头,标头值有逗号
【发布时间】:2012-06-16 23:09:04
【问题描述】:

我使用的是 Delphi XE2 和 Indy 10.5.8.0。我有一个 TIdHttp 实例,我需要在请求中添加一个自定义标头。标头值中包含逗号,因此它会自动解析为多个标头。我不希望它那样做。我需要我的自定义标头的标头值仍然是一个字符串,而不是基于逗号分隔符拆分。

我尝试设置IdHttp1.Request.CustomHeaders.Delimiter := ';',但没有成功。有没有办法确保标题不会被拆分?

procedure SendRequest;
const HeaderStr = 'URL-Encoded-API-Key VQ0_RV,ntmcOg/G3oA==,2012-06-13 16:25:19';
begin
  IdHttp1.Request.CustomHeaders.AddValue('Authorization', HeaderStr);
  IdHttp1.Get(URL);
end;

【问题讨论】:

  • IIRC 你可以这样做:IdHttp1.Request.CustomHeaders.Value['Authorization'] := HeaderStr;等等所有“自定义标头”,不要忘记 SSL!
  • 无论您使用AddValue() 还是Value[],字符串最终都会以TIdHeaderList.FoldAndInsert() 结尾,这是字符串被解析、拆分并添加到列表的地方。

标签: delphi delphi-xe2 indy10


【解决方案1】:

我无法使用最新的 Indy 10.5.8 SVN 快照重现此问题。您显示的字符串被分配为我的单行。

话虽如此,默认情况下,TIdHeaderList.FoldLines 属性设置为 True,并且行会在空格和逗号字符上折叠,这样就可以解释为什么您的字符串会被拆分。据我所知,您的 Indy 版本和 SVN 中的最新版本之间的折叠算法没有任何逻辑更改。

【讨论】:

  • 将 FoldLines 设置为 False 就成功了。 Delphi 中的 Indy 文档说 FoldLength 是强制标头值换行的原因(不是空格或逗号),所以我什至没有费心折叠。一个很棒的无证技巧,谢谢雷米!
  • TIdHeaderList.FoldLength 属性的默认值为 78。您要添加的最终标题的长度是 75,因此即使设置了 TIdHeaderList.FoldLines 属性,它也不应该折叠成多行为真。当我将 TIdHeaderList.FoldLength 属性缩短到 74 或更少时,我看到您的行按预期折叠。因此,在您的情况下,您可以将 FoldLength 设置为高于 75 的值(如果尚未设置),或者设置为 MaxInt 以禁用不同的折叠方式。
  • 当一行被折叠时,它会在最接近该行的FoldLength 位置的空格/逗号字符处折叠。
猜你喜欢
  • 2013-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-14
  • 2012-11-15
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
相关资源
最近更新 更多