Delphi 将自定义标头添加到TIdHttp请求中,标头值包含逗号

Delphi 将自定义标头添加到TIdHttp请求中,标头值包含逗号,delphi,delphi-xe2,indy10,Delphi,Delphi Xe2,Indy10,我正在使用Delphi XE2和Indy 10.5.8.0。我有一个TIdHttp实例,需要向请求添加一个自定义头。标头值中有逗号,因此会自动将其解析为多个标头。我不想让它那样做。我需要自定义标题的标题值仍然是一个字符串,而不是基于逗号分隔符拆分 我已尝试设置IdHttp1.Request.CustomHeaders.Delimiter:=';'没有成功。有没有办法确保标题不会被拆分 procedure SendRequest; const HeaderStr = 'URL-Encoded-AP

我正在使用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;

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


话虽如此,默认情况下,
TIdHeaderList.FoldLines
属性设置为True,行在空格和逗号字符上折叠,这就解释了字符串被拆分的原因。就我所知,在您的Indy版本和SVN的最新版本之间,折叠算法没有任何逻辑变化。

IIRC您可以做:IdHttp1.Request.CustomHeaders.Value['Authorization']:=HeaderStr;等等,对于所有的“自定义头”,不要忘记SSL!无论您使用
AddValue()
还是
Value[]
,字符串最终都会出现在
TIdHeaderList.FoldAndInsert()
中,在这里,字符串会被解析、拆分并添加到列表中。将FoldLines设置为False就成功了。Delphi中的Indy文档说,FoldLength是强制头值换行的内容(不是空格或逗号),所以我甚至没有考虑过折叠。谢谢你,雷米,这是一个很棒的无证骗局!
tideHeaderList.FoldLength
属性的默认值为78。您要添加的最终标题的长度为75,因此即使
TIdHeaderList.FoldLines
属性设置为True,也不应将其折叠成多行。当我将
tideHeaderList.FoldLength
属性缩短为74或更小时,我看到您的行按预期折叠。因此,在您的情况下,您可以交替地将
FoldLength
设置为大于75的值(如果尚未设置),或者设置为
MaxInt
以禁用不同的折叠方式。当折叠一行时,它会在最接近该行的
FoldLength
位置的空格/逗号字符处折叠。