Добавление пользовательского заголовка в запрос TIdHttp, значение заголовка имеет запятые

Я использую 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;

person Sam M    schedule 13.06.2012    source источник
comment
IIRC вы можете сделать: IdHttp1.Request.CustomHeaders.Value['Authorization'] := HeaderStr; и так далее для всех пользовательских заголовков, не забывайте про SSL!   -  person    schedule 14.06.2012
comment
Независимо от того, используете ли вы AddValue() или Value[], строка в конечном итоге заканчивается TIdHeaderList.FoldAndInsert(), где строка анализируется, разбивается на части и добавляется в список.   -  person Remy Lebeau    schedule 14.06.2012


Ответы (1)


Я не могу воспроизвести эту проблему, используя последний снимок Indy 10.5.8 SVN. Строка, которую вы показали, назначается мне как одна строка.

При этом по умолчанию для свойства TIdHeaderList.FoldLines установлено значение True, а строки складываются по пробелам и запятым, что объясняет, почему ваша строка разбивается. Насколько я могу судить, не было никаких логических изменений в алгоритме свертывания между вашей версией Indy и последней версией SVN.

person Remy Lebeau    schedule 13.06.2012
comment
Установка FoldLines на False помогла. В документации Indy в Delphi говорится, что FoldLength — это то, что заставляет значение заголовка переноситься (а не пробелы или запятые), поэтому я даже не беспокоился о сворачивании. Отличный недокументированный трюк, спасибо, Реми! - person Sam M; 14.06.2012
comment
Значение свойства TIdHeaderList.FoldLength по умолчанию — 78. Длина добавляемого окончательного заголовка — 75, поэтому он не должен складываться в несколько строк, даже если для свойства TIdHeaderList.FoldLines установлено значение True. Когда я сокращаю свойство TIdHeaderList.FoldLength до 74 или меньше, я вижу, что ваша строка складывается, как и ожидалось. Таким образом, в вашем случае вы можете альтернативно установить FoldLength на более высокое значение, чем 75 (если оно еще не установлено), или на MaxInt, чтобы отключить свертывание другим способом. - person Remy Lebeau; 14.06.2012
comment
Когда строка складывается, она складывается по символу пробела/запятой, ближайшему к положению FoldLength в строке. - person Remy Lebeau; 14.06.2012