Delphi RESTDebugger GET Запрос URL Кодированный хэш% 23 не работает - PullRequest
0 голосов
/ 17 декабря 2018

Мне нужно, чтобы сработал простой вызов REST GET, например,

.../process('123')  -> working
.../process('123#') -> of course not working
.../process('123%23') -> should be working

В REST-Tool "Почтальон" он работает с закодированным URL, т.е. # ->% 23

Я попробовал это со следующими настройками

Content-type: application/json; charset=utf-8

Content-type: application/x-www-form-urlencoded; charset=UTF-8

Оба не работают.

Пожалуйста, совет. Спасибо, Ральф

1 Ответ

0 голосов
/ 07 марта 2019

EncodeURIComponent в модуле Datasnap.DSClientRest вызывает ту же проблему для меня.

Мое исправление состояло в том, чтобы скопировать модуль в исходный каталог и изменить функцию EncodeURIComponent, чтобы изменить параметры TNetEncoding.URL.Encode из[] до [TURLEncoding.TEncodeOption.EncodePercent], поэтому новая строка результатов будет выглядеть следующим образом:

Result := TNetEncoding.URL.Encode(AStr, UnsafeChars, [TURLEncoding.TEncodeOption.EncodePercent]);

Причина в том, что при вызове без [TURLEncoding.TEncodeOption.EncodePercent] часть

if not(TEncodeOption.EncodePercent in Options) and (I + 2 < Len) and (Buff[I] = Ord('%')) and
    IsHexChar(Buff[I + 1]) and IsHexChar(Buff[I + 2]) then
  begin
    Result := Result + '%' + Char(Buff[I + 1]) + Char(Buff[I + 2]);
    Inc(I, 3);
  end

не будет кодировать%если два следующих символа являются допустимыми шестнадцатеричными символами.

...