Delphi 将自定义标头添加到TIdHttp请求中,标头值包含逗号
我正在使用Delphi XE2和Indy 10.5.8.0。我有一个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
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
位置的空格/逗号字符处折叠。