2012-06-13 2 views
8

Я использую Delphi XE2 и Indy 10.5.8.0. У меня есть экземпляр TIdHttp, и мне нужно добавить пользовательский заголовок в запрос. Значок заголовка содержит в нем запятые, поэтому он автоматически анализируется на несколько заголовков. Я не хочу, чтобы это делалось. Мне нужно значение заголовка для моего настраиваемого заголовка, чтобы по-прежнему быть одной строкой, а не разделять на основе разделителя запятой.Добавление пользовательского заголовка в запрос 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; 
+0

IIRC вы можете сделать: IdHttp1.Request.CustomHeaders.Value ['Authorization']: = HeaderStr; и так далее для всех «пользовательских заголовков», не забывайте о SSL! – ComputerSaysNo

+0

Используете ли вы 'AddValue()' или 'Value []', строка в конечном итоге заканчивается в 'TIdHeaderList.FoldAndInsert()', где строка обрабатывается, разбивается на куски и добавляется в список. –

ответ

4

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

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

+0

Установка FoldLines в False сделала трюк. Документация Indy в Delphi говорит, что FoldLength - это то, что заставляет значение заголовка обертываться (а не пробелы или запятые), поэтому я даже не беспокоился о сворачивании. Огромный недокументированный трюк, спасибо Реми! –

+0

Значение по умолчанию для свойства 'TIdHeaderList.FoldLength' равно 78. Длина конечного заголовка, который вы добавляете, равна 75, поэтому его не следует складывать в несколько строк, даже если свойство' TIdHeaderList.FoldLines' установлено в значение True. Когда я сокращаю свойство 'TIdHeaderList.FoldLength' до 74 или меньше, я вижу, что ваша линия складывается, как ожидалось. Таким образом, в вашем случае вы могли бы изменить значение 'FoldLength' на более высокое значение, чем 75 (если оно еще не было), или' MaxInt', чтобы отключить фальцовку другим способом. –

+0

Когда линия сгибается, она складывается с символом пробела/запятой, который ближе всего к строке 'FoldLength' линии. –

Смежные вопросы